views:

248

answers:

3

I need to generate many classes from my XML Schema (XSD) in a package (.jar). How can I configure these classes to be serializable?

(I'm using Eclipse and JAX-B)

+2  A: 

If you are using XJC, I recomend you to read this reference: JavaTM Architecture for XML Binding: JAXB RI Vendor Extensions Customizations :

You have to add in your schema aditional namespaces definition to add xjc aditional markup:

<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">

Then, including an <xjc:serializable> node within <jaxb:globalBindings>:

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

This will cause that all the concrete classes implement the Serializable interface. Also, you can define the UUID value of the resulting classes (that's an optional attribute).

Tomas Narros
@tomás Tks! We found the same link :). I'll give you +1 and accept
Topera
@Topera Thank you too.
Tomas Narros
+1  A: 

I've found

<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>
Topera
A: 

Why? You already have XML serialization available ipso facto. Why do you need another mechanism?

EJP