在.Net应用程序中使用Java/AXIS web服务时出现问题

在.Net应用程序中使用Java/AXIS web服务时出现问题,java,.net,web-services,interop,wsdl,Java,.net,Web Services,Interop,Wsdl,我必须使用一个由第三方用Java编写的Web服务,我猜是由Axis生成的 我使用的是.NETFramework3.5SP1和VS2008 我做了一个Web引用,正如我们在.NET2.0中所做的那样,并将其指向服务的最新版本 它与服务的某些方法完美配合,但当我尝试调用以int为参数的方法时,会引发以下异常: JAXRPCTIE01: caught exception while handling request: unexpected element type: expected={htt

我必须使用一个由第三方用Java编写的Web服务,我猜是由Axis生成的

我使用的是.NETFramework3.5SP1和VS2008

我做了一个Web引用,正如我们在.NET2.0中所做的那样,并将其指向服务的最新版本

它与服务的某些方法完美配合,但当我尝试调用以int为参数的方法时,会引发以下异常:

JAXRPCTIE01: caught exception while handling request:  
unexpected element type:  
expected={http://schemas.xmlsoap.org/soap/encoding/}int,
actual={http://www.w3.org/2001/XMLSchema}int
我检查了wsdl,它定义了五个不同的Xml模式名称空间:

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"  
xmlns:tns="urn:servicos/wsdlservicosgmp2"  
xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/"  
xmlns:ns3="urn:servicos/typesservicosgmp2"  
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
name="servicosgmp2"  
targetNamespace="urn:servicos/wsdlservicosgmp2">

<schema xmlns="http://www.w3.org/2001/XMLSchema"  
xmlns:tns="urn:servicos/typesservicosgmp2"  
xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"  
targetNamespace="urn:servicos/typesservicosgmp2"> 

以及问题方法的定义:

<message name="IWsServicosGMP2_buscaConvenio">  
<part name="Integer_1" type="ns2:int" />  
<part name="Integer_2" type="ns2:int" />  
</message>


有人知道我该怎么做才能解决这个问题吗?

您需要进入.NET生成的代理类,手动将输入参数的名称空间更改为Axis代码正在使用的名称空间。希望这能奏效


我一直在读一些书,Axis似乎并不总是能很好地与.NET配合使用。

我不确定这是否有帮助,但可能值得一试。您是否尝试过添加服务引用(svcutil.exe包装)而不是Web引用(wsdl.exe包装)?

Java/AXIS Web服务似乎正在使用SOAP(第5节)编码。这是一个倒退,这是非常奇怪的看到这些天

你从哪里得到网络服务的?它已经运行多久了?你有能力改变它吗?AXIS还是AXIS2?什么版本?对于AXIS1,从AXIS1.1开始的任何东西都应该可以工作,但我建议更新到v1.4。如果可能,移动到AXIS2,并使用v1.4。(令人困惑的是,AXIS和AXIS2的版本号相同。)

为什么Java端希望使用SOAP编码?Java端是首先采用了WSDL方法,还是这是一种动态生成的WSDL方法? ,如果您从一开始就将自己局限于doc/lit web服务,并将xmlschema的使用局限于不太奇特的部分:原语、原语的结构和数组。可以嵌套到任何级别:包含数组的结构数组,包含结构数组的结构数组,等等

附录:如果您从Java对象模型开始,并尝试从中动态生成一个wire接口(例如,WSDL),您的互操作性会变得更差,并且您倾向于考虑通过wire而不是消息发送对象,这可能是有害的


要避免的事情:列表、限制、替换组和其他古怪的事情

我也在处理AXIS问题,并找到了一些解决方案

我一直在使用使用AXIS 1.3的不受支持的Web服务与ITIM 5.0集成。我遇到的所有问题都在1.4中得到了解决,鉴于该产品已经使用了5年以上,我不明白他们为什么选择使用旧版本。除了已经发表的关于AXIS如何通过指向集中值存储来表示数组的问题外,我还发现了几个问题。其中一个问题是名称空间。AXIS倾向于使用名称空间生成WSDL,但返回值没有名称空间,.NET只是在反序列化过程中找不到该值。我花了很长时间才找到原因,但我通过手动从代理代码中删除名称空间要求解决了这个问题。我遇到的第二个问题是WSDL如何表示项集合。集合命名为SomeCollection,下面的项命名为Item。当服务返回时,项的名称与集合的名称相同(SomeCollection包含SomeCollection)。我必须手动重命名代理中的所有这些引用,使其与集合相同。这些花费了我无数个小时。如果我找到更多,我会把它们贴在这里。显然,解决方案是升级到1.4,但IBM不支持它,也不提供源代码

在我的博客上读更多


这只是一个猜测,但它可能与使用无符号int的Java有关(据我所知)。谢谢,我会试试看,如果我成功了,会告诉你的。实际上,听起来好像是在.NET端生成代理类(假设WSDL具有正确的命名空间)的任何东西的错误。Hi Cheeso,我从第三方公司得到了这个Web服务。他们刚刚为我们正在制作的集成解决方案开发了它。好的,谢谢你的回答,我会让他们知道你所说的一切。我猜他们采用了动态生成的WSDL方法。这可能是我们问题的根源。再次感谢。是的,如果他们想要互操作,那么WSDL优先是正确的选择。网上有很多关于如何做到这一点的好资源。谢谢。我不确定他们采取了什么样的方法,但在我和他们讨论了你告诉我的事情后,他们对服务做了一些更改,现在它正在按预期工作。再次感谢。不要只发布一个链接,否则如果链接断了,你的答案就一文不值了