我有以下JAXB .xsd架构文件:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1" xmlns="some.namespace.com"
targetNamespace="some.namespace.com">
<xs:element name="outerModel">
<xs:annotation>
<xs:appinfo>
<jaxb:class name="OuterModelDto" />
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="innerModel" type="innerModelDto" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="innerModelDto">
<xs:sequence>
<xs:element name="fullname" type="xs:string" />
<xs:element name="surname" type="xs:string" />
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType>
</xs:schema>
这将创建OuterModelDto
和InnerModelDto
类。 OuterModelDto
注释为@XmlRootElement
,但InnerModelDto
未注明。如何确保InnerModelDto
也注明了@XmlRootElement
?
一个解决方案是将innerModelDto complexType
包装在一个元素中,这意味着我在@XmlRootElement
的两个Dto
上都有OuterModelDto
,但在$('button.btn', this ).attr('id', index);
的序列化过程中,命名空间信息是序列化的,我不想要。
答案 0 :(得分:1)
您可以分离架构中的complexType
和element
定义。每个element
都会生成@XmlRootElement
注释。
确保在架构中声明了一些名称空间前缀,以便能够引用类型,请参阅此处的xmlns:tns
:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="2.1"
targetNamespace="some.namespace.com"
xmlns:tns="some.namespace.com">
<xs:complexType name="OuterModelDto">
<xs:sequence>
<xs:element maxOccurs="unbounded" minOccurs="0" name="innerModel" type="innerModelDto" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="InnerModelDto">
<xs:sequence>
<xs:element name="fullname" type="xs:string" />
<xs:element name="surname" type="xs:string" />
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required" />
</xs:complexType>
<xs:element name="outerModel" type="tns:OuterModelDto" />
<xs:element name="innterModel" type="tns:InnerModelDto" />
</xs:schema>
答案 1 :(得分:0)
您可以使用我的jaxb2-annotate-plugin使用innerModelDto
注释@XmlRootElement
。通过Xstian看到(和upvote)这个答案:
绑定就像:
<bindings node="xs:complexType[@type='innerModelDto']">
<annox:annotateClass>@javax.xml.bind.annotation.XmlRootElement(name="innerModel")</annox:annotateClass>
</bindings>
免责声明:我是jaxb2-annotate-plugin的作者。