我正在使用來自第三方系統的一組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.適當類型
請幫助。
謝謝。我會看看這些。 –