【问题标题】:soap communication using Java socket works, but switching over to java soapconnection does not使用 Java 套接字的肥皂通信有效,但切换到 Java 肥皂连接不起作用
【发布时间】:2012-04-23 20:10:21
【问题描述】:

我最近问了一个关于使用 java 提供的肥皂库 Changing default soap URI 构建 SOAP 消息的问题,所以这个问题最终可能会渗入这个问题,具体取决于最后一个问题的答案可能是什么(事实上,这个问题的答案可能意味着我不必担心我的其他问题)

我已经通过 java 套接字库连接到我正在与之通信的设备并来回传递消息,但是今天我决定使用 java 以 SOAP 的方式提供给我的所有东西,为什么不只是使用它提供的 SOAP 库?

嗯,现在很头疼,但我相信它一旦启动并运行起来就会有好处。无论哪种方式,当我之前与设备通信时,我只是在port 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 和一般的谷歌搜索之后,我还没有找到从套接字通信切换到肥皂时遇到问题的人。

编辑:

不幸的是,我还没有解决问题,但是我确实使用 Wireshark 发现消息发送正确响应也正确。我很困惑为什么响应会看到“null” - 任何接受者?

提前致谢,

-M

【问题讨论】:

    标签: java sockets soap


    【解决方案1】:
    SAAJ0008: Bad Response; null
    

    此错误消息表明服务器以错误消息响应(例如 HTTP 4XX5XX)。在这种情况下,null 是指 java 类无法将错误代码转换为关联的消息。例如。状态码 400、501 和 543 将产生以下错误消息:

    SAAJ0008: Bad Response; Bad Request
    SAAJ0008: Bad Response; Not Implemented
    SAAJ0008: Bad Response; null
    

    很可能您的服务器对请求的格式非常挑剔,并且您发送的特定请求无法正确处理。我建议您尝试验证使用 java 套接字库和 SOAPConnection 发送的请求之间的差异,看看是否有差异。

    【讨论】:

    • 再次感谢 erik 的快速回复!结果我很快就说响应被正确发送了——响应的 SOAP 部分没问题,但是我正在与之通信的设备实际上并没有回复 HTTP 标头(它在本地网络上),只是 SOAP xml。 Wireshark 显示 SOAP 被正确地发送回来,但它在 SOAP 响应的中间被突然切断,我相信当它意识到没有 HTTP 标头存在时,这是 java 给它的斧头。对我来说,看起来像是重载了调用函数或套接字。
    【解决方案2】:

    这是一个老问题,但我在连接 Zimbra SOAP UI 时遇到了同样的问题。问题是肥皂地址问题SOAP request on Java not working, but does on PHP。该链接有正确的解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多