我正在使用与Sabre SOAP API集成的系统。从我的角度来看,它只是将格式正确的XML(Content-Type
标头设置为text/xml
)发送到端点,作为响应,我得到另一个XML。它有效,但偶尔(我们发送的请求的一小部分)我收到此错误:
请求:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<ns4:MessageHeader xmlns:ns4="http://www.ebxml.org/namespaces/messageHeader" xmlns:ns5="http://www.w3.org/1999/xlink" xmlns:ns6="http://schemas.xmlsoap.org/ws/2002/12/secext" xmlns:ns7="http://www.opentravel.org/OTA/2002/11" xmlns:ns8="http://www.w3.org/2000/09/xmldsig#">
<ns4:ConversationId>04f446900386013646690cc47a6a2880</ns4:ConversationId>
<ns4:From>
<ns4:PartyId ns4:type="urn:x12.org:IO5:01">999999</ns4:PartyId>
<ns4:Role/>
</ns4:From>
<ns4:To>
<ns4:PartyId ns4:type="urn:x12.org:IO5:01">123123</ns4:PartyId>
<ns4:Role/>
</ns4:To>
<ns4:CPAId>CPAID</ns4:CPAId>
<ns4:Service ns4:type="OTA"/>
<ns4:Action>PassengerDetailsRQ</ns4:Action>
</ns4:MessageHeader>
<wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
<wsse:BinarySecurityToken EncodingType="wsse:Base64Binary" valueType="String">SECURITY_TOKEN_REMOVED</wsse:BinarySecurityToken>
</wsse:Security>
</soap:Header>
<soap:Body>
<PassengerDetailsRQ HaltOnError="false" version="3.2.0" xmlns="http://services.sabre.com/sp/pd/v3_2">
<PostProcessing RedisplayReservation="true">
<EndTransactionRQ>
<EndTransaction Ind="true"/>
<Source ReceivedFrom="APPNAME"/>
</EndTransactionRQ>
</PostProcessing>
</PassengerDetailsRQ>
</soap:Body>
</soap:Envelope>
响应:
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Header/>
<soap-env:Body>
<soap-env:Fault>
<faultcode>soap-env:Client.InvalidEbXmlMessage</faultcode>
<faultstring>Unable to internalize message</faultstring>
<detail>
<StackTrace>javax.xml.soap.SOAPException: Unable to internalize message</StackTrace>
</detail>
</soap-env:Fault>
</soap-env:Body>
</soap-env:Envelope>
我一直在寻找人类对javax.xml.soap.SOAPException: Unable to internalize message
所代表的情况的描述,但我没有找到任何有用的信息。
我的假设是 - 请求在第一层被拒绝,因此业务层没有处理它,因此我可以在收到此错误时重新发送。 我是对的吗?
我浏览了失败的请求,并将其作为我们发送的其他请求 - 所以我猜这不是因为身体无效。
答案 0 :(得分:1)
我认为您的内容类型不正确。更改为Content-Type:text / xml
答案 1 :(得分:0)
你有退货的请求吗? ebXML消息已格式化 不正确,因此这是Sabre返回的。如果在服务中添加了无效值,则可以返回此值,您将无法通过重新发送来覆盖此值。服务请求有些问题(我会在标题中说,但我也看到了主要负载)。
如果您可以向我显示样品申请,我可以查看。
答案 2 :(得分:0)
就我而言,Content-Length是罪魁祸首。我的设定不正确,身体大于设定的长度。它导致军刀对此错误做出响应。