我在Windows7上使用Eclipse Indigo生成了Axis2(符合JDK 1.6.1,符合JDK 1.5)的Java存根,并在http://www.xmlme.com/WSShakespeare.asmx?WSDL处成功调用了公共Web服务。
对上述服务的getSpeech方法获得了完美的响应。然后,我使用tcpmon(插件)查看正在交换的xml。添加了侦听端口= 4556,目标主机名= www.xmlme.com,目标端口= 80这将生成HTTP 302移动错误。概括地说,当与
ShakespeareSoapProxy ssp = new ShakespeareSoapProxy("http://www.xmlme.com:80/WSShakespeare.asmx?WSDL");
但是当添加tcpmon侦听器并使用调用时失败
ShakespeareSoapProxy ssp = new ShakespeareSoapProxy("http://localhost:4556/WSShakespeare.asmx?WSDL");
tcpmon soap请求
POST /WSShakespeare.asmx?WSDL HTTP/1.0
Content-Type: text/xml; charset=utf-8
Accept: application/soap+xml, application/dime, multipart/related, text/*
User-Agent: Axis/1.4
Host: www.xmlme.com:4556
Cache-Control: no-cache
Pragma: no-cache
SOAPAction: "http://xmlme.com/WebServices/GetSpeech"
Content-Length: 359
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><GetSpeech xmlns="http://xmlme.com/WebServices"><Request>To be, or not to be</Request></GetSpeech></soapenv:Body></soapenv:Envelope>
---------tcpmon response below----------------------------
HTTP/1.0 302 Moved
Location: http://172.16.1.6:15871/cgi-bin/blockpage.cgi?ws-session=1096295497
Pragma: no-cache
Cache-Control: no-cache
为什么tcpmon不能如上失败是我的主要问题。为什么当SOAP客户端运行正常时我会tcpmon吗?因为我从中生成了一个jar,它在Windows7上运行良好。但是,当我在iSeries aka AS400服务器上运行相同的jar时,它给了我Axis错误HTTP 401未经授权和需要身份验证的消息。我们的IT人员确实运行websense来阻止内容,但这是Windows客户端上的localhost,而我之前已经在其中运行.NET Web服务。想法,回应非常感谢,谢谢。
编辑-一些研究指向Windows发送的NTLM默认凭据而服务器没有?任何人都想发表评论吗?
最佳答案
您被重定向到的IP(172.16.1.6)在您的网络本地(请参见"Reserved IP addresses"。)请与网络管理员联系,以了解他们是否阻止了您对www.xmlme.com的请求,以及原因。
在我看来,该问题也应该在没有tcpmon的情况下重现。您可以使用网络嗅探器(例如Wireshark)来比较使用和不使用tcpmon的流量。