【问题标题】:java send wrong data to web servicejava向Web服务发送错误数据
【发布时间】:2016-03-10 17:37:07
【问题描述】:

测试一个web服务,请求soap消息:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:syyh="http://syyh.service.webService.ckw.tdh/">
   <soapenv:Header/>
   <soapenv:Body>
      <syyh:shfeedXzcxInfo>
         <!--Optional:-->
         <arg0>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pjx1
c2VybWFya2VyPjxjb25kaXRpb24gdXNlcm5hbWU9IldVZ3dNREF3TkRJPSIgcGFzc3dvcmQ9IlJq
RTNOa2d4TURFMU1qQXhNREF3TURFPSIvPjwvdXNlcm1hcmtlcj4=</arg0>
         <!--Optional:-->
         <arg1>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pjx6aHh4TGlzdD48emh4eCBCREhNPSJRVTR5TURFMk1ETXdNalV5TURFd01qRXdNREEwTWc9PSIgQ0NYSD0iTVE9PSIgS0haSD0iTURjd01qQXdNVGN3TURBd01ESTJNVEF3TURFPSIgQ0NMQj0iejdYTnM5WEx1c1U9IiBaSFpUPSJ2c1BRL0x1biIgS0hXRD0idWZQVzNkTDQwTkM1eWJmZDA5RFAzcm1yeTc2OThNbXp6OWpXcDlEUSIgS0hXRERNPSIiIEtIUlE9Ik1qQXhNeTh3T1M4d05TQXdNRG93TURvd01BPT0iIFhIUlE9IiIgQlo9Ik1UVTIiIFlFPSJNQzR3TUE9PSIgS1lZRT0iTUM0d01BPT0iIEdMWkpaSD0iIiBGS1NKPSJNakF4Tmk4d015OHdNeUF4T0RveU1Eb3dOUT09IiBUWERaPSJ1ZlBSOU1yUXhNL0Q5OGY0eE0vVXdNSzNOemU2eGJpOU16SzZ4UT09IiBZWkJNPSIiIExYREg9IiIgQkVJWj0iIj48anJ4eExpc3QvPjxkanh4TGlzdC8+PHdseHhMaXN0Lz48cWx4eExpc3QvPjxnbHh4TGlzdC8+PC96aHh4Pjx6aHh4IEJESE09IlFVNHlNREUyTURNd01qVXlNREV3TWpFd01EQTBNZz09IiBDQ1hIPSJNZz09IiBLSFpIPSJNREV3TlRBd01UWXdNREF3TURJek9UQXdNREU9IiBDQ0xCPSJ6N1hOczlYTHVzVT0iIFpIWlQ9InovcTdwdz09IiBLSFdEPSJ1ZlBXM2RMNDBOQzV5YmZkMDlEUDNybXJ5NzY1ODlIMDFNYlIwdGFuME5BPSIgS0hXRERNPSIiIEtIUlE9Ik1qQXhNeTh4TVM4eU9DQXdNRG93TURvd01BPT0iIFhIUlE9Ik1qQXhOQzh4TVM4d055QXdNRG93TURvd01BPT0iIEJaPSJNVFUyIiBZRT0iTUM0d01BPT0iIEtZWUU9Ik1DNHdNQT09IiBHTFpKWkg9IiIgRktTSj0iTWpBeE5pOHdNeTh3TXlBeE9Eb3lNRG93Tmc9PSIgVFhEWj0idWZQUjlNclF4TS9EOThmNHhNL1V3TUszTnplNnhiaTlNeks2eFE9PSIgWVpCTT0iIiBMWERIPSIiIEJFSVo9IiI+PGpyeHhMaXN0Lz48ZGp4eExpc3QvPjx3bHh4TGlzdC8+PHFseHhMaXN0Lz48Z2x4eExpc3QvPjwvemh4eD48L3poeHhMaXN0Pg==</arg1>
      </syyh:shfeedXzcxInfo>
   </soapenv:Body>
</soapenv:Envelope>

但是tcpdump抓到的数据看起来不对,数据实际上不到2000字节,但是抓到了10000+字节,数据太长,这里贴不出来,请查收:here

似乎请求正文是重复发送的,但是当我将soap消息更改为有效消息时,tcpdump捕获的数据看起来正确。

大约 30 秒后,Web 服务服务器将返回错误消息“无法解析流”,所以我认为服务器可能期望更多数据或请求流的某种 EOF,但使 http 请求分块没有帮助。

这个错误最初发生在我们使用 JDK 1.7.0.45 中的 JAX-WS RI 作为 Web 服务客户端的 Java Web 应用程序中。

任何身体都可以帮忙吗?这个错误发生在生产服务器上,我卡了将近一个星期。


我已经在我们的测试环境中测试了同样的消息,完全没有错误......而且我确信生产环境和测试环境都运行相同的操作系统和 java。

【问题讨论】:

    标签: java web-services


    【解决方案1】:

    这其实是网络层的问题。

    客户端机器的 MTU 为 1500,网络路径中的某些设备的 MTU 较小。这导致数据包被丢弃,并且发生了 tcp 重传,这就是 tcpdump 获取 10000+ 字节的原因。

    将 MTU 更改为 1400 后,现在可以使用了。

    这是很少发生的事情,并不是特定于 java 或 web 服务的东西。希望可以帮助别人。

    【讨论】:

      【解决方案2】:

      您显示的数据是一个 base64 编码的 XML 文件。在您的链接中,在 request_cause_error.txt 中,arg1 字段是,例如:

      <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
      <usermarker>
          <condition username="WUgwMDAwNDI=" password="RjE3NkgxMDE1MjAxMDAwMDE="/>
      </usermarker>
      

      那么这里的字段值也是base64编码的。

      显然我不熟悉该协议,但看起来有一堆重新编码正在进行。

      这不是你所期望的吗?

      【讨论】:

      • 是的,xml 属性是 base64 编码的,那么整个 xml 都是 base64 编码的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-17
      • 2016-09-30
      • 1970-01-01
      相关资源
      最近更新 更多