cxf-xjc-plugin
Pom.xml<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-xjc-plugin</artifactId> <version>2.3.0</version> <configuration> <extensions> <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.3.0</extension> </extensions> </configuration> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <goals> <goal>xsdtojava</goal> </goals> <configuration> <sourceRoot>${basedir}/src/main/java</sourceRoot> <xsdOptions> <xsdOption> <xsd>${basedir}/src/main/resources/META-INF/xsd/myTest-1.xsd</xsd> <packagename>es.pruebas.model1</packagename> </xsdOption> <xsdOption> <xsd>${basedir}/src/main/resources/META-INF/xsd/myTest-2.xsd</xsd> <packagename>es.pruebas.model2</packagename> </xsdOption> </xsdOptions> </configuration> </execution> </executions> </plugin>
This plugin does not generate @XmlRootElement annotation in classes.
In order to marshall and unmarshall this objects you have to use ObjectFactory class.
Java code for conversion.
ObjectFactory objectFactory = new ObjectFactory(); JAXBElement<myrootclass> respuestaJAXBElement = objectFactory.createPublicacion(myRootObject); final Marshaller marshaller = JAXBContext.newInstance(ObjectFactory.class).createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); final StringWriter writer = new StringWriter(); marshaller.marshal(respuestaJAXBElement, writer); return writer.toString();
final Unmarshaller unmarshaller = JAXBContext.newInstance(ObjectFactory.class).createUnmarshaller(); JAXBElement<myrootclass> jaxbElement = (JAXBElement<myrootclass>) unmarshaller.unmarshal(inputStream); return jaxbElement.getValue();
maven-jaxb2-plugin
Pom.xml<plugin> <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.12.3</version> <executions> <execution> <id>Generate-clases-xsd</id> <phase>generate-sources</phase> <goals> <goal>generate</goal> </goals> <configuration> <schemaDirectory>src/main/resources/META-INF/xsd/</schemaDirectory> <schemaIncludes> <include>myTest-1.xsd</include> <include>myTest-2.xsd</include> </schemaIncludes> <bindingDirectory>src/main/resources/META-INF/xsd</bindingDirectory> <bindingIncludes> <include>all-schemas-bindings.xjb</include> </bindingIncludes> </configuration> </execution> </executions> <configuration> <args> <arg>-Xannotate</arg> <arg>-nv</arg> </args> <extension>true</extension> <debug>false</debug> <verbose>false</verbose> <episode>false</episode> <forceRegenerate>false</forceRegenerate> <plugins> <plugin> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics</artifactId> <version>0.9.4</version> </plugin> <plugin> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics-annotate</artifactId> <version>1.0.1</version> </plugin> </plugins> </configuration> </plugin>
In binding files you can specify wich class is the rootElement, so you can get @XmlRootElement annotation.
all-schemas-bindings.xjb
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:annox="http://annox.dev.java.net" > <jaxb:globalBindings generateIsSetMethod="true"/> <jaxb:bindings schemaLocation="myTest-1.xsd" node="/xs:schema"> <jaxb:schemaBindings> <jaxb:package name="es.pruebas.model1"/> </jaxb:schemaBindings> <jaxb:bindings node="//xs:complexType[@name='MyRootElement1']"> <annox:annotate> <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="MyRootElement1"/> </annox:annotate> </jaxb:bindings> </jaxb:bindings> <jaxb:bindings schemaLocation="myTest-2.xsd" node="/xs:schema"> <jaxb:schemaBindings> <jaxb:package name="es.pruebas.model2"/> </jaxb:schemaBindings> <jaxb:bindings node="//xs:element[@name='MyRootElement2']"> <annox:annotate> <annox:annotate annox:class="javax.xml.bind.annotation.XmlRootElement" name="MyRootElement2"/> </annox:annotate> </jaxb:bindings> </jaxb:bindings> </jaxb:bindings>
No hay comentarios:
Publicar un comentario