使用JavaSocket的soap通信可以工作,但切换到JavaSoapConnection则不行
最近,我问了一个关于使用java提供的SOAP库构建SOAP消息的问题,因此这个问题可能会在最后一个问题的答案中有所涉及(事实上,这个问题的答案可能意味着我不必担心我的另一个问题) 我已经通过java套接字库连接到我正在与之通信的设备,并来回传递消息,但是今天我决定,既然java以SOAP的方式为我提供了一切,为什么不使用它提供的SOAP库呢 好吧,这是一个头痛现在,但我相信它将是有益的,一旦启动和运行。无论哪种方式,当我以前与设备通信时,我只是打开了使用JavaSocket的soap通信可以工作,但切换到JavaSoapConnection则不行,java,sockets,soap,Java,Sockets,Soap,最近,我问了一个关于使用java提供的SOAP库构建SOAP消息的问题,因此这个问题可能会在最后一个问题的答案中有所涉及(事实上,这个问题的答案可能意味着我不必担心我的另一个问题) 我已经通过java套接字库连接到我正在与之通信的设备,并来回传递消息,但是今天我决定,既然java以SOAP的方式为我提供了一切,为什么不使用它提供的SOAP库呢 好吧,这是一个头痛现在,但我相信它将是有益的,一旦启动和运行。无论哪种方式,当我以前与设备通信时,我只是打开了端口80上IP地址xxx.xxx.xxx.x
端口80
上IP地址xxx.xxx.xxx.xxx
处的套接字,但当我使用SOAPConnection.call
方法时,我得到以下错误:
Apr 23, 2012 3:47:06 PM com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection post
SEVERE: SAAJ0008: Bad Response; null
com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (-1null
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.call(Unknown Source)
at DeviceCommunicator.openConnection(DeviceCommunicator.java:184)
at ClientRunner.main(ClientRunner.java:29)
Caused by: com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl: Bad response: (-1null
at com.sun.xml.internal.messaging.saaj.client.p2p.HttpSOAPConnection.post(Unknown Source)
... 3 more
以下是电话,如果有帮助的话:
SOAPConnection sc = SOAPConnectionFactory.newInstance().createConnection();
SOAPMessage response = sc.call(sm, "http://xxx.xxx.xxx.xxx");
其中,xxx.xxx.xxx.xxx
显然是设备的IP地址(我已经尝试调用了SOAPConnection.call
方法,其中第二个参数是http://xxx.xxx.xxx.xxx:80
也没有成功)
在仔细阅读了stackoverflow和一般的google搜索之后,我还没有发现有人在从套接字通信切换到soap时遇到问题
编辑:
不幸的是,我还没有解决这个问题,但是我确实发现使用Wireshark可以正确发送消息,响应也可以。我很困惑,为什么响应会显示“null”-任何接受者
提前感谢,
-M
此错误消息表示服务器响应了错误消息(例如HTTP4XX
或5XX
)。在本例中,null表示java类无法将错误代码转换为相关消息。例如,状态代码400、501和543将产生以下错误消息:
SAAJ0008: Bad Response; Bad Request
SAAJ0008: Bad Response; Not Implemented
SAAJ0008: Bad Response; null
很可能您的服务器对请求的格式非常挑剔,并且无法正确处理您发送的特定请求。我建议您尝试验证使用java socket库发送的请求与使用SOAPConnection发送的请求之间是否存在差异。这是一个老问题,但我在连接Zimbra SOAP UI时遇到了相同的问题。问题是soap地址问题。链接有正确的解决方案再次感谢erik的快速回复!事实证明,我很快就说响应被正确发送了——响应的SOAP部分是正常的,但是我正在与之通信的设备实际上并没有使用HTTP头(它在本地网络上)进行响应,而只是SOAP xml。WiReSurk显示SOAP正在被正确地发送回来,但是在SOAP响应的中间突然被切断,并且我相信当java实现了没有HTTP头的时候,它就给了它斧头。看起来像是重载了调用函数或套接字。
SAAJ0008: Bad Response; Bad Request
SAAJ0008: Bad Response; Not Implemented
SAAJ0008: Bad Response; null