返回javax.xml.soap.SOAPException的原因:无法内置来自SOAP API的消息

时间:2018-03-08 06:39:47

标签: xml soap sabre

我正在使用与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所代表的情况的描述,但我没有找到任何有用的信息。

我的假设是 - 请求在第一层被拒绝,因此业务层没有处理它,因此我可以在收到此错误时重新发送。 我是对的吗?

我浏览了失败的请求,并将其作为我们发送的其他请求 - 所以我猜这不是因为身体无效。

3 个答案:

答案 0 :(得分:1)

我认为您的内容类型不正确。更改为Content-Type:text / xml

答案 1 :(得分:0)

你有退货的请求吗? ebXML消息已格式化 不正确,因此这是Sabre返回的。如果在服务中添加了无效值,则可以返回此值,您将无法通过重新发送来覆盖此值。服务请求有些问题(我会在标题中说,但我也看到了主要负载)。

如果您可以向我显示样品申请,我可以查看。

答案 2 :(得分:0)

就我而言,Content-Length是罪魁祸首。我的设定不正确,身体大于设定的长度。它导致军刀对此错误做出响应。