Как генерировать классы из XSD, которые реализуют сериализуемые? - PullRequest
12 голосов
/ 09 сентября 2010

Мне нужно создать много классов из моей XML-схемы (XSD) в пакете (.jar).Как я могу настроить эти классы для сериализации?

(я использую Eclipse и JAX-B)

Ответы [ 2 ]

22 голосов
/ 09 сентября 2010

Если вы используете XJC, я рекомендую вам прочитать эту ссылку: Архитектура JavaTM для привязки XML: настройки расширений JIXB RI Vendor :

Вы должны добавить в свою схему дополнительные пространства именопределение для добавления дополнительной разметки xjc:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"

           xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
           xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
           jaxb:extensionBindingPrefixes="xjc"
           jaxb:version="1.0">

Затем, включая узел <xjc:serializable> в <jaxb:globalBindings>:

<xs:annotation>
   <xs:appinfo>
      <jaxb:globalBindings generateIsSetMethod="true">
          <xjc:serializable uid="12343"/>
      </jaxb:globalBindings>
   </xs:appinfo>
</xs:annotation>

Это приведет к тому, что все конкретные классы реализуют интерфейс Serializable,Кроме того, вы можете определить значение UUID результирующих классов (это необязательный атрибут).

5 голосов
/ 09 сентября 2010

Я нашел

<schema
  xmlns="http://www.w3.org/2001/XMLSchema"
  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
  jaxb:extensionBindingPrefixes="xjc"
  jaxb:version="1.0"  
  >

  <!-- FORCE ALL CLASSES IMPLEMENTS SERIALIZABLE -->
  <annotation>
    <appinfo>
      <jaxb:globalBindings generateIsSetMethod="true">
        <xjc:serializable uid="1"/>
      </jaxb:globalBindings>
    </appinfo>
  </annotation>

   ....

</schema>
...