Axis2';s wsdl2java在RPC/编码样式的web服务上失败

Axis2';s wsdl2java在RPC/编码样式的web服务上失败,java,axis2,axis,wsdl2java,jax-rpc,Java,Axis2,Axis,Wsdl2java,Jax Rpc,除了Axis2还有其他选择吗?或者如何使其工作(例如,不同的数据绑定) 注意:Apache CXF也失败了:(尝试Axis 1,我使用它正是出于这个原因。我在axis2中也遇到了SimpleDataBinding问题。我通过使用 AxisDataBinding选项。从编码角度看,它的重量要重一些, 但毕竟是有效的 此外,我同意Robert的观点,他说axis1也是一个有趣的选择。我不打算深入讨论这个问题,但既然您要求提供替代方案: Java6SE和Java5EE附带(参考)实现 它位于名称空间

除了Axis2还有其他选择吗?或者如何使其工作(例如,不同的数据绑定)


注意:Apache CXF也失败了:(

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

我在axis2中也遇到了SimpleDataBinding问题。我通过使用 AxisDataBinding选项。从编码角度看,它的重量要重一些, 但毕竟是有效的


此外,我同意Robert的观点,他说axis1也是一个有趣的选择。

我不打算深入讨论这个问题,但既然您要求提供替代方案:

Java6SE和Java5EE附带(参考)实现

它位于名称空间中

Sun的开发者网络有一篇文章可能很有用


话虽如此,Eclipse还不是很好。

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

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

2) WebLogic的clientgen

3) Axis1 v1.4wsdl2java

最初我们使用Axis1.4来实现这一点,它在相对较大的服务响应(>20k)上表现出相当差的性能,即客户端处理时间比没有解析的普通HTTP请求增加了两倍以上。如果反应越大,时间越长。仅仅反序列化1MB大响应需要30多秒

SUN生成的客户端无法正常工作,请求时失败,并显示以下消息:

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

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

Axis2不支持rpc编码。来源:

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

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


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

-d xmlbeans

soapenc.xsd上的答案帖子可以在这里找到 帮助了我

我在使用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)
我尝试通过使用网站“”中的内容创建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>

.. 

是的,我们目前实际上使用的是Axis 1。但是我们遇到了性能问题:(。你知道Axis 1或2或Apache CXF还有其他替代品吗?我很乐意使用JAX-WS,但JAX-WS不支持rpc/编码样式的web服务。而且我无法更改web服务:(,但我需要一个客户端。我尝试过使用JAX-RPC引用实现和wscompile。在下载了SUN未包含在普通发行版中的所有JAR之后,我成功地生成了客户端,但失败了,出现异常:*原因:意外的元素名:expected=GetSubscriberInfo返回,actual={}GetSubscriberInfoReturn您可以演示如何精确地执行此操作吗?当运行
java-classpath path/to/axis-1_4/lib/org.apache.axis.wsdl.WSDL2Java
时,我遇到了一个
错误:找不到或加载主类org.apache.axis.wsdl.WSDL2Java
Man,那是6年前的事了:)。您的错误表明您的类路径有问题。
<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>