java将错误的数据发送到Web服务

时间:2016-03-04 01:44:46

标签: java web-services

测试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 < / p>

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

大约30秒后,Web服务服务器将返回一个错误,说“无法解析流”#34;所以我想服务器可能期望更多的数据或请求流的某种EOF ,但是将http请求分块并没有帮助。

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

任何身体都能帮忙吗?这个错误发生在生产服务器上,我被困在它上面将近一周。

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

2 个答案:

答案 0 :(得分:1)

这实际上是一个网络层问题。

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

将MTU更改为1400后,现在可以正常工作。

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

答案 1 :(得分:-1)

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

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

然后这里的字段值也是base64编码的。

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

这不是你所期望的吗?