I am using Apache CXF
cxf-codegen-plugin
Maven
plugin to generate sources from WSDL
file. Problem is that I get JAXBElement<String>
generated instead of String
. I have added the jaxb-bindings.xml
file which looks like this:
<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"> <jaxb:globalBindings generateElementProperty="false"/> </jaxb:bindings>
This should prevent JAXB
to generate JAXBElement<String>
. But it is not working I still have JAXBElement<String>
generated instead of String
.
My Maven
plugin looks like this:
<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
version is 2.6.0
. Does someone know where might be the problem?
EDIT
The XSD is very huge. This is the element which generating 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"/>
And the generated source is:
@XmlElementRef(name = "RequestStatusDescription", namespace = "http://www.cubiksonline.com/2009/08/AssessmentProvider", type = JAXBElement.class) protected JAXBElement<String> requestStatusDescription;
Advertisement
Answer
What I had to do is to wrap jaxb:globalBindings
with another 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>
Now everything is working, there is no JAXBElement<String>
generated anymore.