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

2022-08-31 15:53:09

我正在使用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 或其他任何内容来修复它?


答案 1

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

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

在 -cp 类路径参数中,您将需要以下 jar 或等效项:

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

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

如果您查看 WSDL,则以下位使用的是 rpc/encodeed:

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

答案 2

我使用了Chase Seibert在他的答案中建议的Axis 1.4,尽管该答案中给出的下载链接不起作用。我使用的替代下载链接给了我不同的库。以下是我生成代码所遵循的步骤。

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

解压缩它,您应该有以下文件(其中包括):

  • 轴.jar
  • 共享资源-发现-0.2.jar
  • 共享资源-日志记录-1.0.4.jar
  • jaxrpc.jar
  • 萨吉.jar
  • wsdl4j-1.5.1.jar

使用以下命令执行 WSDL2Java(当然,替换 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

这将生成您的 Java 文件。

附言:使用安讯士 1.2.1 时,这似乎同样有效。


推荐