62

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

4

6 回答 6

81

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

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

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

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

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

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

<soap:body use="encoded"
           encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
于 2009-01-06T03:14:21.670 回答
20

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

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

提取它,您应该有以下文件(以及其他文件):

  • 轴.jar
  • commons-discovery-0.2.jar
  • commons-logging-1.0.4.jar
  • jaxrpc.jar
  • saaj.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 文件。

PS:这似乎在使用 Axis 1.2.1 时同样有效。

于 2014-07-28T06:43:25.400 回答
6

可能这对CXF有帮助。Alteast 它对我有用。我编辑了 WSDL 文件并删除了 SOAP-ENC 的所有引用并ArrayOfString以下列方式创建了类型

<xsd:complexType name="ArrayOfString">
    <xsd:sequence>
      <xsd:element minOccurs="0" maxOccurs="unbounded" name="String" type="xsd:string"/>
    </xsd:sequence>
</xsd:complexType>
于 2012-04-17T17:10:51.740 回答
6

如果有人想使用 maven:(加上一些关于 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>
于 2018-10-15T21:51:48.897 回答
0

这是发生在我身上的事情(同一文件夹中的旧 wsdl):https ://www.damirscorner.com/blog/posts/20180831-CodeGenerationWithMavenCxfPlugin.html

“很明显,是其他原因导致 Maven 插件出现问题。经过大量试验和错误后,我终于找到了问题的根源。同一文件夹中还有另一个 WSDL 文件,该文件用于 RPC/literal web “

于 2020-04-29T12:27:20.883 回答
-4

只需提取并执行 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
于 2016-08-04T08:09:44.687 回答