2009-01-05 8 views
51

Ich verwende CXF 2.1 Java-Code aus einer WSDL-Datei zu erzeugen, aber ich bin immer folgende Fehlermeldung:java: Rpc/codierte WSDLs sind nicht in JAXWS unterstützt 2.0

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 kann ich dieses Problem beheben Fehler, kann ich eine frühere Version von CXF oder irgendetwas anderes verwenden, um es zu beheben?

Antwort

67

RPC/encoded ist eine Spur von bevor SOAP-Objekte mit XML-Schema definiert wurden. Es ist not widely supported mehr. Sie müssen die Stubs mit Apache Axis 1.0 erzeugen, die aus der gleichen Zeit stammen.

java org.apache.axis.wsdl.WSDL2Java http://someurl?WSDL 

Sie folgende Gläser oder Äquivalente im -cp Classpath param müssen:

  • achsen 1.4.jar
  • commons-logging-1.1.ja
  • commons-Discovery- 0.2.jar
  • jaxrpc-1.1.jar
  • saaj-1.1.jar
  • wsdl4j-1.4.jar
  • aktivierungs 1.1.jar
  • Mail-1.4.jar

Dies wird ähnlich Stubs erzeugen wsimport.

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

Wenn man sich die WSDL aussehen, werden die folgenden Bits verwenden rpc/encoded:

<soap:body use="encoded" 
      encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
+0

Vielen Dank für Ihre Antwort – tamilnad

+3

Gibt es eine Dokumentation für dieses Problem im Internet? – tamilnad

+1

Auf der letzten Axis 1.4 Distribution habe ich unterschiedliche jars benennt und mail-1.4.jar ist nicht vorhanden. Es funktioniert nicht wie es ist. (Ich folgte Ihrem Axis 1.0 Link) –

5

Kann dies mit CXF helfen würde, sein. Alteast hat bei mir funktioniert. ich die WSDL-Datei bearbeitet und entfernt alle Verweise von SOAP-ENC und Typ ArrayOfString in unten Art und Weise

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

Ich benutzen Achse 1.4 als Chase Seibert in his answer vorgeschlagen, obwohl der Download-Link in dieser Antwort gegeben nicht Arbeit. 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.

Extrakt, und Sie sollten die folgenden Dateien (unter anderem) haben:

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

WSDL2Java Führen Sie den folgenden Befehl (der URL, natürlich ersetzen):

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 

Diese Java-Dateien generieren.

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

+3

Zwei Klassen werden als fehlend gemeldet, was dazu führt, dass die Anlagenunterstützung deaktiviert wird. Um dies zu beheben, rufen Sie mail.jar und activation.jar ab und fügen Sie sie dem Befehl hinzu. –

+3

Fügen Sie mailapi.jar und activation.jar als @Marco Brochet angegeben hinzu. Ich habe -classpath und ersetzt ";" mit ":". java -classpatch axis.jar: commons-logging-1.0.4.jar: commons-discovery-0.2.jar: jaxrpc.jar: saaj.jar: wsdl4j-1.5.1.jar: mailapi.jar: activation.jar org. apache.axis.wsdl.WSDL2Java https://api.clickatell.com/soap/webservice.php?WSDL –

-1

einfach extrahieren und WSDL2Java ausführen? mit dem folgenden Befehl (als Ersatz für die URL, natürlich):

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