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>
Twitter
Facebook
Reddit
LinkedIn
StumbleUpon
Email