tool plugin online generate from example java maven jaxb cxf wsdl2java

java - plugin - JAXB generando JAXBElement<String> en lugar de String



wsdl2java cxf example (3)

Estoy usando Apache CXF cxf-codegen-plugin Maven Apache CXF cxf-codegen-plugin plugin para generar fuentes desde el archivo WSDL . El problema es que obtengo JAXBElement<String> generado en lugar de String . He añadido el archivo jaxb-bindings.xml que tiene este aspecto:

<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"> <jaxb:globalBindings generateElementProperty="false"/> </jaxb:bindings>

Esto debería evitar que JAXB genere JAXBElement<String> . Pero no funciona, todavía tengo JAXBElement<String> generado en lugar de String .

Mi plugin Maven tiene este aspecto:

<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>${cxf.runtime.version}</version> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-bindings-soap</artifactId> <version>${cxf.runtime.version}</version> </dependency> </dependencies> <executions> <execution> <id>generate-jaxb</id> <phase>generate-sources</phase> <configuration> <additionalJvmArgs>-Dfile.encoding=UTF8</additionalJvmArgs> <wsdlOptions> <wsdlOption> <wsdl>src/main/resources/wsdl/Cubiks.wsdl</wsdl> <extraargs> <extraarg>-b</extraarg> <extraarg>${basedir}/jaxb-bindings.xml</extraarg> <extraarg>-b</extraarg> <extraarg>${basedir}/jaxws-bindings.xml</extraarg> <extraarg>-exsh</extraarg> <extraarg>true</extraarg> <extraarg>-wsdlLocation</extraarg> <extraarg></extraarg> </extraargs> </wsdlOption> <wsdlOption> <wsdl>src/main/resources/wsdl/CubiksCallBackService.wsdl</wsdl> <extraargs> <extraarg>-b</extraarg> <extraarg>${basedir}/jaxws-bindings.xml</extraarg> <extraarg>-b</extraarg> <extraarg>${basedir}/jaxb-bindings.xml</extraarg> <extraarg>-exsh</extraarg> <extraarg>true</extraarg> <extraarg>-p</extraarg> <extraarg>com.cubiks.ws.callback</extraarg> <extraarg>-wsdlLocation</extraarg> <extraarg></extraarg> </extraargs> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin>

CXF versión CXF es 2.6.0 . ¿Alguien sabe dónde podría estar el problema?

EDITAR

El XSD es muy grande. Este es el elemento que genera JAXBElement<String>

<xs:complexType name="ServiceResponse"> <xs:sequence> <xs:element minOccurs="0" name="RequestStatus" type="tns:RequestStatus"/> <xs:element minOccurs="0" name="RequestStatusDescription" nillable="true" type="xs:string"/> </xs:sequence> </xs:complexType> <xs:element name="ServiceResponse" nillable="true" type="tns:ServiceResponse"/>

Y la fuente generada es:

@XmlElementRef(name = "RequestStatusDescription", namespace = "http://www.cubiksonline.com/2009/08/AssessmentProvider", type = JAXBElement.class) protected JAXBElement<String> requestStatusDescription;


Creo que quieres agregar en tu jaxb-binding.xml:

<jaxb:bindings ... xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"> <jaxb:globalBindings generateElementProperty="false"> <xjc:simple /> <!-- ... --> </jaxb:globalBindings> </jaxb:bindings>


Lo que tenía que hacer es envolver jaxb:globalBindings con otro jaxb:bindings .

<jaxb:bindings version="2.0" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"> <jaxb:bindings> <jaxb:globalBindings generateElementProperty="false"/> </jaxb:bindings> </jaxb:bindings>

Ahora todo está funcionando, ya no se JAXBElement<String> .


No se puede tener nillable y minoccurs juntos. Eliminar los minoccurs ya que no tiene sentido para cadenas de todos modos.