java:JAXWS 2.0不支持Rpc /编码的wsdls

我正在使用CXF 2.1从wsdl生成java代码,但是我收到以下错误:

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) 

我如何解决这个错误,我可以使用以前版本的CXF或其他任何修复它?

RPC / encoded是SOAP对象用XML Schema定义之前的遗迹。 这不是广泛的支持 。 您将需要使用来自同一时代的Apache Axis 1.0生成存根。

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

在-cp classpath param中需要以下jar或等价物:

  • 轴-1.4.jar
  • 共享logging,1.1.ja
  • 公共发现-0.2.jar
  • JAXRPC-1.1.jar
  • SAAJ-1.1.jar
  • WSDL4J-1.4.jar
  • 激活1.1.jar
  • 邮件1.4.jar

这将生成类似的存根到wsimport。

或者 ,如果您不使用需要rpc / encoded的模式部分,则可以下载WSDL副本并注释掉这些位。 然后对本地文件运行wsimport。

如果您查看WSDL,则以下位正在使用rpc / encoded:

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

我在他的回答中使用了Axis 1.4作为Chase Seibert的build议,虽然在答案中给出的下载链接不起作用。 我使用的替代下载链接给了我不同的库。 以下是我遵循的步骤来生成我的代码。

转到http://apache.is.co.za/axis/axis/java/1.4/并下载;axis-bin-1_4.zip

提取它,你应该有以下文件(其中包括):

  • axis.jar
  • 公共发现-0.2.jar
  • 共享logging-1.0.4.jar
  • 没有jaxrpc.jar
  • 没有saaj.jar
  • WSDL4J-1.5.1.jar

使用以下命令执行WSDL2Java(当然,replaceURL):

 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 

这将生成您的Java文件。

PS:这似乎使用Axis 1.2.1同样适用。

可能是这将有助于CXF。 Alteast它为我工作。 我编辑了WSDL文件并删除了所有的SOAP-ENC引用,并以下面的方式创build了typesArrayOfString

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

Chase Serbeit的回答为我工作。 这里是我已经find的所有他提到的图书馆的链接:

  • 轴-1.4.jar
  • 共享logging,1.1.ja
  • 公共发现-0.2.jar
  • JAXRPC-1.1.jar
  • SAAJ-1.1.jar
  • WSDL4J-1.4.jar
  • 激活1.1.jar
  • 邮件1.4.jar

只是提取,并执行WSDL2Java? 使用以下命令(当然replaceURL):

 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