2015-02-28 2 views
2

я создал Java Beans из следующих XSD файловXSD для Java Bean имя JAXB поля

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> 

Цель состоит в том, чтобы определить Person в качестве отдельного класса и включить список лиц в класс Team.

Теперь класс команда содержит поле

List<Person> person; 

Есть ли способ, чтобы дать другое название этой области? Скажите «участники».

List<Person> members; 

Возможно, я не могу редактировать созданный класс.

ответ

3

Этот привязок работает отлично

<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> 
+0

Отлично, отлично работает по требованию – Thiyanesh

0

Вы можете просто отредактировать сгенерированный класс и переименовать поле (но сохранить или добавить @XmlElement (имя = «человек») на вершине

Вы также можете настроить схему связывания, например:. http://docs.oracle.com/javase/tutorial/jaxb/intro/custom.html

, но это боль, по сравнению с простой аннотацией. это легче всего принять человека вместо члена.

+0

есть способ сделать это, не касаясь генерировать класс? Обновлен вопрос. – Thiyanesh

+0

добавлена ​​ссылка на настройку схемы – Zielu

+0

Спасибо за ссылку. Попробуем и обновим – Thiyanesh

Смежные вопросы