我必须使用在.NET 2.0中实现的第三方Web服务(当然,在IIS上)。
我必须创建一个java客户端。我正在使用wsdl2java生成SOAP存根。
由于最初的Apache Axis项目现在看起来没有维护,并且我在解析服务的某些响应时遇到了一些问题,因此我将客户端转换为使用最新的(1.5)版本的Axis2。现在,.NET服务甚至无法识别我的请求。
我设法关闭了“chunking”(其中“stub”是由wsdl2java生成的MumbleStub类型的变量,我在这里显示了几行代码作为一个可怕的行):
stub._getServiceClient().getOptions().setProperty( HTTPConstants.CHUNKED, Boolean.FALSE);
..所以至少服务会识别我的请求 AS 一个请求,虽然是一个错误的请求:“HTTP/1.1 400 Bad Request
”现在是响应(而不是“简介/摘要”)页面为我提供了WSDL的链接。)
我注意到Axis(“1”)请求有一个不同的Content-TYpe标头(text / xml,vs application / soap-xml),我想知道如何更改此请求标头,如果这实际上是问题。
或者,还有其他人有这个问题吗?这个问题真的是(在这里不可显示,因为它看起来像博客引擎的“元素注入”)... xml版本 - “1.0”...“XML元介绍标记”Axis2添加到请求的开头?
确实是WS-Deathstar。答案 0 :(得分:2)
当你提到不同的内容类型标题时,我猜你的客户端会尝试发送SOAP 1.2请求而第三方应用只能理解SOAP 1.1
尝试更改使用过的soap版本,因为AFAIK AXIS2默认使用SOAP 1.2
stub._getServiceClient().getOptions().setSoapVersionURI(org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);