web-dev-qa-db-fra.com

JAXB générant JAXBElement <String> au lieu de String

J'utilise Apache CXFcxf-codegen-pluginMaven 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;
30
Paulius Matulionis

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.

40
Paulius Matulionis

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.

10
ramsinb

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>
5
Frank Pavageau