我正在使用来自第三方系统的一组DTD。我们的目标是将XML请求(符合这些DTD的请求映射到java中,然后将XML响应发送回系统)。如何自定义和覆盖jaxb绑定
DTDs是用石头写的(我没有任何控制改变它们)。
因此,为了映射,我使用XMLSpy将DTD转换为XML Schemas(xsd),然后使用XJC编译器创建Jaxb绑定类。我正在使用Java 7.
问题是,DTD没有真正的名称空间..我有20个不同的DTD .. 10个用于请求,10个用于响应。当我生成模式时,我必须做一对一的映射..并创建了相同的10个请求XSD和10个响应XSD。
现在,jaxb xjc编译器生成绑定类..但它们远没有实际用途。没有继承关系,因为这些模式不相互关联(虽然它们似乎有相似的内容 - 请求类型和响应类型)。
有人可以帮助我,如果有一种方法来定制jaxb绑定来覆盖默认绑定并创建更合理的绑定?
例如,考虑这个简单的例子:
DTD:
<xs:element name="FromDate">
<xs:complexType mixed="true">
<xs:attribute name="year" use="required"/>
<xs:attribute name="month" use="required"/>
<xs:attribute name="day" use="required"/>
</xs:complexType>
</xs:element>
表示出来XJC编译器生成的绑定类(java的1.7:我生成使用XMLSpy的
<!ELEMENT FromDate (#PCDATA)>
<!ATTLIST FromDate
year CDATA #REQUIRED
month CDATA #REQUIRED
day CDATA #REQUIRED
>
架构):
public class FromDate {
@XmlValue
protected String content;
@XmlAttribute(name = "year", required = true)
@XmlSchemaType(name = "anySimpleType")
protected String year;
@XmlAttribute(name = "month", required = true)
@XmlSchemaType(name = "anySimpleType")
protected String month;
@XmlAttribute(name = "day", required = true)
@XmlSchemaType(name = "anySimpleType")
protected String day;
...
...
如果你看一下没有fromdate最终如何演变,它没有任何意义“CUS只是从这个请求获取日期,我需要做的
setMyDate(request.getFromDate().getMonth() + request.getFromDate().getDay() + request.getFromDate().getYear());
这显然是没有意义的。另外,类型是远离的。
如何自定义/覆盖JAXB绑定来实现这两个东西: 1.继承(某种抽象的,以减少冗余) 2.适当类型
请帮助。
谢谢。我会看看这些。 –