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

java:JAXWS 2.0不支持Rpc/编码的WSDL,java,jax-ws,Java,Jax Ws,我正在使用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.wsdl1

我正在使用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是使用XML模式定义SOAP对象之前的遗留问题。再也没有了。您将需要使用生成存根,它来自同一时代

java org.apache.axis.wsdl.WSDL2Java http://someurl?WSDL 
在-cp classpath参数中需要以下JAR或等效JAR:

  • wsdl4j-1.4.jar
这将生成与wsimport类似的存根

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

如果查看WSDL,则以下位使用rpc/编码:

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

这可能对CXF有所帮助。虽然它对我有用。 我编辑了WSDL文件,删除了SOAP-ENC的所有引用,并以下面的方式创建了type
ArrayOfString

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

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

转到并下载axis-bin-1_4.zip

解压缩它,您应该拥有以下文件(以及其他文件):

  • axis.jar
  • commons-discovery-0.2.jar
  • commons-logging-1.0.4.jar
  • jaxrpc.jar
  • saaj.jar
  • wsdl4j-1.5.1.jar
使用以下命令执行WSDL2Java(当然,替换URL):

这将生成您的Java文件


p.S.:使用Axis 1.2.1,这似乎同样有效。

只需提取并执行WSDL2Java?使用以下命令(当然,替换URL):


如果有人想使用maven:(加上一些关于WSDL绑定样式的信息)


org.codehaus.mojo
AxisToolsMaven插件
1.4
生成源
生成源
wsdl2java
${basedir}/src/main/resources/wsdl
org.apache.axis
轴
1.4
org.apache.axis
axis jaxrpc
1.4
公用记录
公用记录
1.2
公地发现
公地发现
0.5
轴
axis-wsdl4j
1.5.1
org.apache.axis
axis saaj
1.4
javax.activation
激活
1.1.1
javax.mail
邮件
1.4.7

这就是发生在我身上的事情(同一文件夹中的旧wsdl):


“显然,Maven插件的问题是由其他原因造成的。经过反复试验,我终于弄清了真相。同一文件夹中还有另一个WSDL文件,该文件用于RPC/literal web服务。插件失败,因为它试图处理它,尽管配置中指向我的WSDL路径的完整路径没有以任何方式指向它。“

internet上是否有解决此问题的文档?在上一个Axis 1.4发行版中,我有不同的jar命名,mail-1.4.jar不存在。它不能正常工作。(我遵循了Axis1.0链接)您需要显式添加它。mail-1.x.jar和activation-1.x.jar我尝试了您的方法,得到了“java.net.ProtocolException:服务器重定向太多次",这可能是因为我正在尝试从需要身份验证的web服务导入,如何使用您的方法处理身份验证?@Albert,maven请参阅下面的文章。报告缺少两个类,导致附件支持被禁用。若要解决此问题,请获取mail.jar和activation.jar并将它们添加到com如@Marco Brochet所述,添加mailapi.jar和activation.jar。我使用了-classpath并将“;”替换为“:”.java-classpath 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
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 -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
<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>