Michael HönnigMichael Hönnig
Mein laufendes Projekt ist ein Client für vorgegebene Webservices. Aus der WSDL-Datei werden durch eine Konfiguration in der pom.xml über das wsimport Kommando des Maven2-Plugins org.codehaus.mojo:jaxws-maven-plugin mit xjc Java-Klassen generiert. Nun ergab sich die Notwendigkeit, diese Klassen Serializable zu machen. Nach einer kurzen Recherche kam ich auf die folgende Lösung: Zunächst wird in die xsd-Datei mit den Datentypen für den Webservice eine Annotation aufgenommen, mit der diese Klassen mit dem Interface Serializable markiert werden:
<xs:schema
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    jaxb:version="1.0" jaxb:extensionBindingPrefixes="xjc">

<xs:annotation>
    <xs:appinfo>
        <jaxb:globalBindings>
            <xjc:serializable uid="10000001"/>
        </jaxb:globalBindings>
    </xs:appinfo>
</xs:annotation>

...
</xs:schema>
An derselben Stelle könnte man auch eine beliebige Basisklasse einführen, von der diese generierten Klassen dann abgeleitet werden. Auch andere interessante Konfigurationen sind dort möglich. Doch zurück zum konkreten Fall: Dann muss noch in der pom.xml das Plugin für die Code-Generierung umkonfguriert werden, damit diese Erweiterung vom jxc überhaupt verwendet wird:
   
  <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>1.9</version>
        <executions>
            <execution>
                <goals>
                    <goal>wsimport</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <keep>true</keep>
            <extension>true</extension>
            <xjcArgs></xjcArgs>
        </configuration>
    </plugin>