it-swarm.com.de

java: RPC / codierte WSDLs werden in JAXWS 2.0 nicht unterstützt

Ich benutze CXF 2.1, um Java Code aus einer WSDL zu generieren, aber ich erhalte die folgende Fehlermeldung:

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)

Wie behebe ich diesen Fehler? Kann ich eine frühere Version von CXF oder etwas anderes verwenden, um ihn zu beheben?

55
Óli

RPC/encoded ist ein Überbleibsel von zuvor SOAP Objekte wurden mit XML Schema definiert. Es ist nicht mehr weit verbreitet . Sie müssen die Stubs generieren mit Apache Axis 1. , das aus der gleichen Zeit stammt.

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

Sie benötigen die folgenden Gläser oder Entsprechungen im Parameter -cp classpath:

Dies erzeugt ähnliche Stubs wie wsimport.

Alternativ können Sie, wenn Sie nicht die Teile des Schemas verwenden, die rpc/encoded erfordern, eine Kopie der WSDL herunterladen und diese Bits auskommentieren. Führen Sie dann wsimport für die lokale Datei aus.

Wenn Sie sich die WSDL ansehen, verwenden die folgenden Bits rpc/encoded:

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

Ich habe Axis 1.4 verwendet, wie Chase Seibert in seiner Antwort vorgeschlagen hat, obwohl der in dieser Antwort angegebene Download-Link nicht funktioniert. Der alternative Download-Link, den ich verwendet habe, gab mir verschiedene Bibliotheken. Im Folgenden sind die Schritte aufgeführt, die ich ausgeführt habe, um meinen Code zu generieren.

Gehen Sie zu http://Apache.is.co.za/axis/axis/Java/1.4/ und laden Sie axis-bin-1_4.Zip herunter. .

Extrahieren Sie es und Sie sollten (unter anderem) die folgenden Dateien haben:

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

Führen Sie WSDL2Java mit dem folgenden Befehl aus (ersetzen Sie natürlich die URL):

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

Dadurch werden Ihre Java Dateien generiert.

P.S.: Dies scheint mit Axis 1.2.1 gleich gut zu funktionieren.

16
Stephan

Vielleicht würde dies bei CXF helfen. Alles in allem hat es bei mir funktioniert. Ich habe die WSDL-Datei bearbeitet und alle Referenzen von SOAP-ENC entfernt und den Typ ArrayOfString wie folgt erstellt

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

Falls jemand maven verwenden möchte: (plus hier einige Informationen zu WSDL-Bindungsstilen)

<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