我從xml模式生成java類,對於一個複雜類型,我希望jaxb使用現有類,爲此我有一個外部綁定自定義文件。 自定義類被解組爲,除了以外,該類型的單個屬性永遠不會填充到java類中。JAXB未將屬性映射到「自定義」類
下面是類型/類Thing的問題演示。
如在模式中定義的事情是:
<xsd:complexType name="Thing">
<xsd:sequence>
<xsd:element name="nameEl" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="nameAttr" type="xsd:string" use="required"/>
</xsd:complexType>
和讀取匹配xml文件是片段:
JAXBContext jc = JAXBContext.newInstance("jaxbtest");
Unmarshaller u = jc.createUnmarshaller();
// Make it validate against the instance schema
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("./sample.xsd"));
u.setSchema(schema);
Config config = (Config)u.unmarshal(new File("./sample.xml"));
for (Thing thing : config.getThing()) {
System.out.println("nameAttr=[" + thing.getNameAttr() +"]");
System.out.println("nameEl=[" + thing.getNameEl() +"]");
}
閱讀在此xml:
<m:config xmlns:m="test">
<thing nameAttr="hello">
<nameEl>goodbye</nameEl>
</thing>
</m:config>
使用由JAXB生成的Thing類(不使用自定義xjb),輸出如預期的那樣:
nameAttr=[hello]
nameEl=[goodbye]
使用它只是有干將& setter方法nameAttr & nameEl自定義事類,輸出
nameAttr=[null]
nameEl=[goodbye]
自定義類很簡單:
public class Thing {
private String nameEl;
private String nameAttr;
public String getNameEl() {
return nameEl;
}
public void setNameEl(String value) {
this.nameEl = value;
}
public String getNameAttr() {
return nameAttr;
}
public void setNameAttr(String value) {
this.nameAttr = value;
}
}
任何人都可以解釋爲什麼「nameEL」元素和「nameAttr」屬性的行爲是不同的?
將自定義Thing與JAXB生成的東西進行比較唯一的區別是註釋,當不從Java類生成模式時,我認爲這不是必需的,並且顯然不適用於包含的元素。
爲了完整起見,XJB是:
<jxb:bindings
version="2.1"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb">
<jxb:bindings schemaLocation="sample.xsd">
<jxb:bindings node="//xsd:complexType[@name='Thing']">
<jxb:package name=""/>
<jxb:class ref="custom.Thing"/>
</jxb:bindings>
</jxb:bindings>
</jxb:bindings>
這是我得到null的屬性。 你說得對,將註釋添加到自定義類中並沒有什麼用。 – bwldrd 2014-10-04 12:33:56
我誤解了xsd-> java類生成映射的本質:我認爲在.xjb中定義映射的重點將避免編輯xsd或目標自定義java類,這兩者都不需要了解其他,即。良好的解耦。出於興趣,是否有另外一種實現映射到自定義類的機制?這是適配器嗎? 聚苯乙烯 - 謝謝你麻煩回答我原來的問題。 – bwldrd 2014-10-04 12:38:15