我有以下架构,据我所知,它声明了元素<foo>
,它有两个可选元素<bar>
和<baz>
类型为nillable string。
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="bar" type="xs:string" nillable="true" />
<xs:element name="foo">
<xs:complexType>
<xs:sequence>
<xs:element ref="bar" minOccurs="0"/>
<xs:element name="baz" type="xs:string" nillable="true" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
当我通过xjc
运行架构时,输出如下。
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"bar",
"baz"
})
@XmlRootElement(name = "foo")
public class Foo {
@XmlElement(nillable = true)
protected String bar;
@XmlElementRef(name = "baz", type = JAXBElement.class, required = false)
protected JAXBElement<String> baz;
// getters and setters as you'd expect
}
请注意bar
未生成为JAXBElement<String>
的情况,即使它既是可存储的也是可选的。这是xjc中的错误吗?我该如何区分这两个文件?
<foo>
<baz>hello world</baz>
</foo>
<foo>
<bar xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
<baz>hello world</baz>
</foo>