Axis2 的 wsdl2java 在 RPC/Encoded 样式 Web 服务上失败

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/1357483/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-12 11:06:36  来源:igfitidea点击:

Axis2's wsdl2java fails on RPC/Encoded style web services

javaaxis2axiswsdl2javajax-rpc

提问by Andrey Adamovich

Is there any alternative to Axis2? Or the way to make it work (different data binding, for example)?

有没有 Axis2 的替代品?或者让它工作的方式(例如不同的数据绑定)?

Retrieving document at '...'.
Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:271)
        at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
        at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
        at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:53)
        at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:224)
        ... 2 more
Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:50)
        ... 3 more
Caused by: org.apache.axis2.schema.SchemaCompilationException: can not find type {http://schemas.xmlsoap.org/soap/encoding/}Array from the parent schema ...        at org.apache.axis2.schema.SchemaCompiler.copyMetaInfoHierarchy(SchemaCompiler.java:1296)
        at org.apache.axis2.schema.SchemaCompiler.processComplexContent(SchemaCompiler.java:1258)
        at org.apache.axis2.schema.SchemaCompiler.processContentModel(SchemaCompiler.java:1153)
        at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1097)
        at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1017)
        at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:931)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:766)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:552)
        at org.apache.axis2.schema.SchemaCompiler.process(SchemaCompiler.java:1991)
        at org.apache.axis2.schema.SchemaCompiler.processParticle(SchemaCompiler.java:1874)
        at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1081)
        at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1017)
        at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:931)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:766)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:552)
        at org.apache.axis2.schema.SchemaCompiler.process(SchemaCompiler.java:1991)
        at org.apache.axis2.schema.SchemaCompiler.processParticle(SchemaCompiler.java:1874)
        at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1081)
        at org.apache.axis2.schema.SchemaCompiler.processAnonymousComplexSchemaType(SchemaCompiler.java:980)
        at org.apache.axis2.schema.SchemaCompiler.processSchema(SchemaCompiler.java:934)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:592)
        at org.apache.axis2.schema.SchemaCompiler.processElement(SchemaCompiler.java:563)
        at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:370)
        at org.apache.axis2.schema.SchemaCompiler.compile(SchemaCompiler.java:280)
        at org.apache.axis2.schema.ExtensionUtility.invoke(ExtensionUtility.java:103)
        ... 8 more

NOTE: Apache CXF fails as well :(

注意:Apache CXF 也失败了 :(

采纳答案by Andrey Adamovich

There are only 3 options that I have found that can be used in Java for old-style rpc/encoded web services:

我发现只有 3 个选项可以在 Java 中用于旧式 rpc/编码的 Web 服务:

1) SUN's reference implementation of JAX-RPC (wscompile)

1)SUN的JAX-RPC参考实现(wscompile

2) WebLogic's clientgen(I used 8.1 version)

2)WebLogic的clientgen(我用的是8.1版本)

3) Axis1 v1.4 wsdl2java

3) Axis1 v1.4 wsdl2java

Originally we used Axis 1.4 for that and it showed quite poor performance on relatively large service responses (>20k) i.e. client processing time increased more than twice comparing to plain HTTP request without parsing. And the time grows if response gets bigger. It took more than 30s to just deserialize 1MB large respose.

最初我们为此使用 Axis 1.4,它在相对较大的服务响应 (>20k) 上表现出相当差的性能,即与没有解析的纯 HTTP 请求相比,客户端处理时间增加了两倍多。如果响应变大,时间就会增加。仅反序列化 1MB 大响应就花了 30 多秒。

SUN's generated client didn't really work and it failed on request with the message:

SUN 生成的客户端并没有真正工作,并且根据请求失败并显示以下消息:

unexpected element name: 
   expected=getSubscriberInfoReturn, 
   actual={ws.generated.api}getSubscriberInfoReturn

I have tried using WebLogic's 8.1 clientgen, and compared client code to Axis 1.4 generated client's performance. And Axis won the race. So, even though Axis client is performing not that good on relatively large responses it still is the best option out there for old rpc/encoded web services :(.

我曾尝试使用 WebLogic 的 8.1 clientgen,并将客户端代码与 Axis 1.4 生成的客户端的性能进行比较。Axis 赢得了比赛。因此,即使 Axis 客户端在相对较大的响应上表现不佳,它仍然是旧 rpc/编码 Web 服务的最佳选择:(。

回答by Robert Munteanu

Try Axis 1, I've used it for this exact reason.

尝试 Axis 1,正是出于这个原因,我才使用它。

回答by KB22

I've had issues with SimpleDataBinding in axis2 too. I resolved them by using the AxisDataBinding option. Which is bit more heavy weight from a coding perspective, but works after all.

我在axis2 中也遇到了SimpleDataBinding 的问题。我使用 AxisDataBinding 选项解决了它们。从编码的角度来看,这有点重,但毕竟有效。

ADB in detail

亚行详细

Furthermore I'd agree to Robert, stating that axis1 is an interesting option too.

此外,我同意罗伯特,他说axis1 也是一个有趣的选择。

回答by Powerlord

I'm not going to get in depth with this, but since you asked for alternatives:

我不会深入探讨这一点,但既然你要求替代方案:

Java 6 SE and Java 5 EE ship with the Metro JAX-WS(reference) implementation.

Java 6 SE 和 Java 5 EE 附带Metro JAX-WS(参考)实现。

It lives in the javax.xml.wsnamespace.

它存在于javax.xml.ws命名空间中。

Sun's Developer Network has an article Introducing JAX-WS 2.0 With the Java SE 6 Platformthat might be useful.

Sun 的 Developer Network 有一篇文章Introducing JAX-WS 2.0 With the Java SE 6 Platform可能有用。

Having said all this, Eclipse is not very JAX-WS friendly.

说了这么多,Eclipse 对JAX-WS不是很友好

回答by Buhake Sindi

RPC encoding is not supported on Axis2. Source: http://wiki.apache.org/ws/StackComparison

Axis2 不支持 RPC 编码。来源:http: //wiki.apache.org/ws/StackComparison

回答by Prashant

This issue raises if the soap encoding style is old axis2 wsdl2java or wsimport cannot understand the old RPC encoding style so use the axis 1.4 or older version of axis the draw back is that u will not find wsdl2java as a tool in old axis instead you will find it as a class file in the axis jar file so u have to manually set a the classpath and use that class

如果soap 编码样式是旧的axis2 wsdl2java 或wsimport 无法理解旧的RPC 编码样式,则会出现此问题,因此请使用axis 1.4 或旧版本的axis 缺点是您将找不到wsdl2java 作为旧轴中的工具,而您将在轴 jar 文件中找到它作为类文件,因此您必须手动设置类路径并使用该类

D:\axis-1_4\lib>java -classpath \axis-1_4\lib* org.apache.axis.wsdl.WSDL2Java urwsdl

D:\axis-1_4\lib>java -classpath \axis-1_4\lib* org.apache.axis.wsdl.WSDL2Java urwsdl

回答by Olcay Tarazan

You can add following parameter for wsdl2javacommand

您可以为wsdl2java命令添加以下参数

-d xmlbeans

回答by Krishna Prakash

The answer post on soapenc.xsd found here Clickatell SOAP wsdl to JAXB java classeshelped me .

在这里找到的关于 soapenc.xsd 的答案帖子 Clickatell SOAP wsdl to JAXB java classes帮助了我。

I was using wsdl2java utility of axis1.5, we got the similar error on array.

我正在使用axis1.5的wsdl2java实用程序,我们在数组上遇到了类似的错误。

Exception in thread "main" org.apache.axis2.wsdl.codegen.CodeGenerationException: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
            at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:271)
            at org.apache.axis2.wsdl.WSDL2Code.main(WSDL2Code.java:35)
            at org.apache.axis2.wsdl.WSDL2Java.main(WSDL2Java.java:24)
    Caused by: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
            at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:53)
            at org.apache.axis2.wsdl.codegen.CodeGenerationEngine.generate(CodeGenerationEngine.java:224)
            ... 2 more
    Caused by: java.lang.reflect.InvocationTargetException
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
            at java.lang.reflect.Method.invoke(Method.java:597)
            at org.apache.axis2.wsdl.codegen.extension.SimpleDBExtension.engage(SimpleDBExtension.java:50)
            ... 3 more
    Caused by: org.apache.axis2.schema.SchemaCompilationException: can not find type {http://schemas.xmlsoap.org/soap/encoding/}Array from the parent schema ....
            at org.apache.axis2.schema.SchemaCompiler.copyMetaInfoHierarchy(SchemaCompiler.java:1296)
            at org.apache.axis2.schema.SchemaCompiler.processComplexContent(SchemaCompiler.java:1258)
            at org.apache.axis2.schema.SchemaCompiler.processContentModel(SchemaCompiler.java:1153)
            at org.apache.axis2.schema.SchemaCompiler.processComplexType(SchemaCompiler.java:1097)
            at org.apache.axis2.schema.SchemaCompiler.processNamedComplexSchemaType(SchemaCompiler.java:1017)

I tried updating my wsdl file by creating the soapenc.xsd with the contents from website 'http://schemas.xmlsoap.org/soap/encoding/'. As shown below, this worked really for me.

我尝试通过使用来自网站“ http://schemas.xmlsoap.org/soap/encoding/”的内容创建 soapenc.xsd 来更新我的 wsdl 文件。如下所示,这对我来说真的很有效。

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1= .. xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns=.. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace=..>
<types>
    <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace=.. xmlns:ns1=.. xmlns:ns2=.. xmlns:tns=.. xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"/>
</types>
<import location="soapenc.xsd" namespace="http://schemas.xmlsoap.org/soap/encoding/"/>
<message name="Input">
    <part name=../>
</message>
<message name="Output">
    <part name=../>
</message>
<portType name=".."> .. </portType>
<binding name="..." type="tns:"..">
    <operation name="...">          ..          </operation>
    <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
</binding>
<service name="...">
    <port binding="tns:..." name="...">         <soap:address location="..."/>      </port>
</service>