2012-01-18 11 views
6

Estoy generando clases de Java desde un WSDL utilizando el objetivo wsimport de jaxws-maven-plugin. Fuera de la caja, esto genera clases y métodos espantosos del esquema XML; por ejemplo, una clase llamada MYOBJECT de un elemento XML llamado MY_OBJECT.¿Cómo puedo hacer que JAXB2 emita enlaces CamelCase?

He encontrado que puedo customize my JAXB2 bindings con un archivo externo; esto sería aceptable para un pequeño número de clases y métodos, pero la sobrecarga de nombrar todo manualmente en este caso no es deseable.

Algunas búsquedas descubren referencias a un complemento XJC CamelCase Always, pero parece que no se ha mantenido y la mayoría de los enlaces son 404. No estoy dispuesto a darme por vencido, encontré un artefacto Maven camelcase-always que parece proporcionar esta funcionalidad, pero no estoy seguro de cómo configurar esto para que jaxws-maven-plugin lo use.

¿Cómo puedo obtener enlaces CamelCase sin especificarlos todos manualmente?

Respuesta

5

No he encontrado ejemplos de cómo hacer esto con jaxws-maven-plugin, pero encontré ejemplos utilizando el maven-jaxb2-plugin.

En primer lugar, se necesita un repositorio añadido a su POM:

<repository> 
    <id>releases</id> 
    <name>Releases</name> 
    <url>https://oss.sonatype.org/content/repositories/releases</url> 
</repository> 

Véase la Declaración de los plugins y argumentos añaden a la ejecución maven-jaxb2-plugin.

<plugin> 
    <groupId>org.jvnet.jaxb2.maven2</groupId> 
    <artifactId>maven-jaxb2-plugin</artifactId> 
    <version>0.8.0</version> 
    <executions> 
     <execution> 
      <id>jaxb-generate</id> 
      <phase>generate-sources</phase> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
     </execution> 
    </executions> 
    <configuration> 
     <generatePackage>YOUR.PACKAGE.HERE</generatePackage> 
     <args> 
      <arg>-camelcase-always</arg> 
     </args> 
     <bindingDirectory>src/main/binding</bindingDirectory> 
     <schemas> 
      <schema> 
       <url>http://YOUR.WSDL.HERE</url> 
      </schema> 
     </schemas> 
     <extension>true</extension> 
     <plugins> 
      <plugin> 
       <groupId>org.andromda.thirdparty.jaxb2_commons</groupId> 
       <artifactId>camelcase-always</artifactId> 
       <version>1.0</version> 
      </plugin> 
     </plugins> 
    </configuration> 
</plugin> 

Ver el docs para más detalles.

0

Puede ser útil para los usuarios de Apache CXF y el complemento cxf-xjc.

<plugin> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-xjc-plugin</artifactId> 
    <version>3.1.0</version> 
    <configuration> 
     <extensions> 
     <extension>org.andromda.thirdparty.jaxb2_commons:camelcase-always:1.0</extension> 
     </extensions> 
    </configuration> 
    <executions> 
     <execution> 
     <id>generate-sources</id> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>xsdtojava</goal> 
     </goals> 
     <configuration> 
      <sourceRoot>${basedir}/target/generated-sources/cxf</sourceRoot> 
      <xsdOptions> 
      <xsdOption> 
       <xsd>YOUR.XSD.HERE</xsd> 
       <packagename>YOUR.PACKAGE.HERE</packagename> 
       <extensionArgs> 
       <extensionArg>-camelcase-always</extensionArg> 
       </extensionArgs> 
       <extension>true</extension> 
      </xsdOption> 
      </xsdOptions> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
Cuestiones relacionadas