J'utilise Apache CXF
cxf-codegen-plugin
Maven
plugin pour générer des sources à partir du fichier WSDL
. Le problème est que je reçois JAXBElement<String>
généré au lieu de String
. J'ai ajouté le jaxb-bindings.xml
fichier qui ressemble à ceci:
<jaxb:bindings version="2.1"
xmlns:jaxb="http://Java.Sun.com/xml/ns/jaxb">
<jaxb:globalBindings generateElementProperty="false"/>
</jaxb:bindings>
Cela devrait empêcher JAXB
de générer JAXBElement<String>
. Mais ça ne marche pas j'ai encore JAXBElement<String>
généré au lieu de String
.
Mon plugin Maven
ressemble à ceci:
<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
la version est 2.6.0
. Est-ce que quelqu'un sait où pourrait être le problème?
MODIFIER
Le XSD est très énorme. C'est l'élément qui génère 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"/>
Et la source générée est:
@XmlElementRef(name = "RequestStatusDescription", namespace = "http://www.cubiksonline.com/2009/08/AssessmentProvider", type = JAXBElement.class)
protected JAXBElement<String> requestStatusDescription;
Ce que je devais faire est d'envelopper jaxb:globalBindings
avec un autre 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>
Maintenant, tout fonctionne, il n'y a pas de JAXBElement<String>
généré plus.
Vous ne pouvez pas avoir Nillable et Minoccurs ensemble. Supprimez les minoccurs car cela n'a aucun sens pour les chaînes de toute façon.
Je pense que vous voulez ajouter dans votre 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>