web-dev-qa-db-fra.com

java: Rpc / wsdls codés ne sont pas pris en charge dans JAXWS 2.0

J'utilise CXF 2.1 pour générer Java code à partir d'un wsdl, mais j'obtiens l'erreur suivante:

WSDLToJava Error: Rpc/encoded wsdls are not supported in JAXWS 2.0

org.Apache.cxf.tools.common.ToolException: Rpc/encoded wsdls are not supported in JAXWS 2.0
    at org.Apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.checkSupported(JAXWSDefinitionBuilder.Java:141)
    at org.Apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.build(JAXWSDefinitionBuilder.Java:87)
    at org.Apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11.JAXWSDefinitionBuilder.build(JAXWSDefinitionBuilder.Java:61)
    at org.Apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.Java:127)
    at org.Apache.cxf.tools.wsdlto.WSDLToJavaContainer.execute(WSDLToJavaContainer.Java:232)
    at org.Apache.cxf.tools.common.toolspec.ToolRunner.runTool(ToolRunner.Java:83)
    at org.Apache.cxf.tools.wsdlto.WSDLToJava.run(WSDLToJava.Java:103)
    at org.Apache.cxf.tools.wsdlto.WSDLToJava.main(WSDLToJava.Java:173)

Comment puis-je corriger cette erreur, puis-je utiliser une version précédente de CXF ou toute autre chose pour la corriger?

55
Óli

RPC/encodé est un vestige d'avant SOAP ont été définis avec le schéma XML. C'est plus largement supporté plus. Vous devrez générer les stubs en utilisant Apache Axis 1. , qui est de la même époque.

Java org.Apache.axis.wsdl.WSDL2Java http://someurl?WSDL 

Vous aurez besoin des fichiers JAR ou équivalents suivants dans le paramètre -cp classpath:

Cela générera des talons similaires à wsimport.

Alternativement , si vous n'utilisez pas les parties du schéma qui nécessitent rpc/encoded, vous pouvez télécharger une copie du WSDL et commenter ces bits. Exécutez ensuite wsimport sur le fichier local.

Si vous regardez le WSDL, les bits suivants utilisent rpc/encoded:

<soap:body use="encoded"
           encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
71
Chase Seibert

J'ai utilisé Axis 1.4 comme Chase Seibert l'a suggéré dans sa réponse , bien que le lien de téléchargement donné dans cette réponse ne fonctionne pas. Le lien de téléchargement alternatif que j'ai utilisé m'a donné différentes bibliothèques. Voici les étapes que j'ai suivies pour générer mon code.

Allez sur http://Apache.is.co.za/axis/axis/Java/1.4/ et téléchargez axis-bin-1_4.Zip .

Extrayez-le et vous devriez avoir les fichiers suivants (entre autres):

  • axis.jar
  • commons-discovery-0.2.jar
  • commons-logging-1.0.4.jar
  • jaxrpc.jar
  • saaj.jar
  • wsdl4j-1.5.1.jar

Exécutez WSDL2Java à l'aide de la commande suivante (en remplaçant l'URL, bien sûr):

Java -cp axis.jar;commons-logging-1.0.4.jar;commons-discovery-0.2.jar;jaxrpc.jar;saaj.jar;wsdl4j-1.5.1.jar org.Apache.axis.wsdl.WSDL2Java http://someURL?WSDL

Cela générera vos fichiers Java.

P.S.: Cela semble fonctionner aussi bien avec Axis 1.2.1.

16
Stephan

Peut-être que cela aiderait CXF. Cela a fonctionné pour moi. J'ai édité le fichier WSDL et supprimé toutes les références de SOAP-ENC et créé le type ArrayOfString ci-dessous

<xsd:complexType name="ArrayOfString">
    <xsd:sequence>
      <xsd:element minOccurs="0" maxOccurs="unbounded" name="String" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>
5
Rites

Si quelqu'un souhaite utiliser maven: (plus ici quelques informations sur les styles de liaison WSDL)

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>axistools-maven-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <id>generate-sources</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>wsdl2Java</goal>
                    </goals>
                    <configuration>
                        <!-- Use your .wsdl location here-->
                        <sourceDirectory>${basedir}/src/main/resources/wsdl</sourceDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<!-- Here the libraries that you need to call the Axis WS client -->
<dependencies>
    <dependency>
        <groupId>org.Apache.axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>org.Apache.axis</groupId>
        <artifactId>axis-jaxrpc</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>commons-discovery</groupId>
        <artifactId>commons-discovery</artifactId>
        <version>0.5</version>
    </dependency>
    <dependency>
        <groupId>axis</groupId>
        <artifactId>axis-wsdl4j</artifactId>
        <version>1.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.Apache.axis</groupId>
        <artifactId>axis-saaj</artifactId>
        <version>1.4</version>
    </dependency>
    <!-- activation+mail: To stop Axis generating WARNING about "Attachment support being disabled" -->
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4.7</version>
    </dependency>
</dependencies>
2
Foyta