我有一个web服务,它向我们的客户端服务器发出SOAP请求(我无法访问该服务器,也不知道web服务方法是如何实现的(。
我们方面的代码最近没有变化,以前工作正常(大部分情况下仍然有效(,但客户一直报告说,由于";重复XML声明";记录在Data Power内部。
他们接收到的SOAP消息被截断(缺少大量数据(,并且在XML的末尾,初始SOAP头被复制。看起来他们收到了部分消息,然后出现了一些错误,然后尝试重新处理,但再次失败。基本上它看起来像这样:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<sendData>
<requestHeader>
//PARTIAL INFORMATION INCLUDED HERE
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<sendProspect xmlns="http://webservices.zurich.com/zsoa/fig/policyacquisition/prospectquote-v1_0">
<requestHeader>
是什么原因导致SOAP消息被截断?我正在考虑客户端和服务器之间的某种通信错误,或者可能是web服务器更改,但我想知道是否有其他人遇到了这种问题,可以提供一些建议。
EDIT:添加了从客户端接收的HTTP标头:
POST <webservice> HTTP/1.1
http_racfid: <info>
SOAPAction: ""
MULE_ENCODING: UTF-8
Host: <hostInfo>
Connection: keep-alive
Accept: */*
Content-Type: text/xml
Content-Length: 41341
duplicate XML declaration
通常发生在您的处理策略中有一个样式表Action没有检测到有效的XML,并且它试图"修复";它这表明您没有从服务器获得完整的XML。
为服务启用Probe并查看INPUT xml。
您也可以在default
域中按照注释中的建议启动数据包捕获,或者启动文件捕获以获取任何传入的消息。NB数据包捕获和文件捕获都会严重影响性能,因此您不应该在大批量生产环境中执行此操作!
另一种侵扰性较小的方式是;真实的";INPUT是在Match操作之后直接添加GatewayScript操作,该操作将INPUT写入temporary:///
文件,您可以查看该文件。这是";"更安全";当temporary:///
存储器自我清理时。。。