我从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