xsd 到 java bean jaxb 字段名
xsd to java bean jaxb field name
我已经从以下 xsd 个文件创建了 java 个 bean
person.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" elementFormDefault="qualified"
jxb:version="2.0">
<xs:annotation>
<xs:appinfo>
<jxb:globalBindings>
<jxb:serializable uid="1"/>
</jxb:globalBindings>
<jxb:schemaBindings>
<jxb:package name="com.thiyanesh"/>
</jxb:schemaBindings>
</xs:appinfo>
</xs:annotation>
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:long"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
team.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" elementFormDefault="qualified"
jxb:version="2.0">
<xs:import schemaLocation="person.xsd"/>
<xs:annotation>
<xs:appinfo>
<jxb:globalBindings>
<jxb:serializable uid="2"/>
</jxb:globalBindings>
<jxb:schemaBindings>
<jxb:package name="com.thiyanesh"/>
</jxb:schemaBindings>
</xs:appinfo>
</xs:annotation>
<xs:element name="team">
<xs:complexType>
<xs:sequence>
<xs:element ref="person" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
objective 是将 Person 定义为单独的 class 并包含 Team class 中的人员列表。
现在 class 团队包含字段
List<Person> person;
有没有办法给这个字段起一个不同的名字?说 "members".
List<Person> members;
我可能无法编辑生成的 class。
您可以只编辑生成的 class 并重命名该字段(但在顶部保留或添加 @XmlElement(name="person")。
您还可以自定义架构绑定,例如:
http://docs.oracle.com/javase/tutorial/jaxb/intro/custom.html
但与简单的注释相比,这是一种痛苦。只接受人而不是成员更容易。
这个绑定工作正常
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:annox="http://annox.dev.java.net"
xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix">
<bindings schemaLocation="../path/team.xsd">
<bindings node="//xs:element[@name='team']//xs:complexType//xs:sequence//xs:element[@ref='person']">
<property name="members"/>
</bindings>
</bindings>
</bindings>
其他
<xs:element name="team">
<xs:complexType>
<xs:sequence>
<xs:element ref="person" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jxb:property name="members" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
我已经从以下 xsd 个文件创建了 java 个 bean
person.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" elementFormDefault="qualified"
jxb:version="2.0">
<xs:annotation>
<xs:appinfo>
<jxb:globalBindings>
<jxb:serializable uid="1"/>
</jxb:globalBindings>
<jxb:schemaBindings>
<jxb:package name="com.thiyanesh"/>
</jxb:schemaBindings>
</xs:appinfo>
</xs:annotation>
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:long"/>
<xs:element name="name" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
team.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb" elementFormDefault="qualified"
jxb:version="2.0">
<xs:import schemaLocation="person.xsd"/>
<xs:annotation>
<xs:appinfo>
<jxb:globalBindings>
<jxb:serializable uid="2"/>
</jxb:globalBindings>
<jxb:schemaBindings>
<jxb:package name="com.thiyanesh"/>
</jxb:schemaBindings>
</xs:appinfo>
</xs:annotation>
<xs:element name="team">
<xs:complexType>
<xs:sequence>
<xs:element ref="person" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
objective 是将 Person 定义为单独的 class 并包含 Team class 中的人员列表。
现在 class 团队包含字段
List<Person> person;
有没有办法给这个字段起一个不同的名字?说 "members".
List<Person> members;
我可能无法编辑生成的 class。
您可以只编辑生成的 class 并重命名该字段(但在顶部保留或添加 @XmlElement(name="person")。
您还可以自定义架构绑定,例如: http://docs.oracle.com/javase/tutorial/jaxb/intro/custom.html
但与简单的注释相比,这是一种痛苦。只接受人而不是成员更容易。
这个绑定工作正常
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:annox="http://annox.dev.java.net"
xmlns:namespace="http://jaxb2-commons.dev.java.net/namespace-prefix">
<bindings schemaLocation="../path/team.xsd">
<bindings node="//xs:element[@name='team']//xs:complexType//xs:sequence//xs:element[@ref='person']">
<property name="members"/>
</bindings>
</bindings>
</bindings>
其他
<xs:element name="team">
<xs:complexType>
<xs:sequence>
<xs:element ref="person" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:appinfo>
<jxb:property name="members" />
</xs:appinfo>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>