«Отсутствует <soap -env: Заголовок> в <soap -env: Конверт>» - Потребитель Sabre Webservice в Mule 4 - PullRequest
0 голосов
/ 05 марта 2020

Попытка вызова веб-службы Sabre, но с ошибкой SOAP, указанной выше. Очевидно, что заголовок не отсутствует. В этот момент ставится в тупик.

Входящие параметры передаются в процессор сообщений Transform, а полезная нагрузка преобразуется в XML и передается в Web-приемник для выполнения внешнего вызова. Конфигурация Consumer использует WSDL, предоставленный Sabre.

Я уверен, что мне не хватает чего-то простого. Любая помощь приветствуется.

enter image description here

Код данных в процессоре преобразования:

%dw 2.0
output application/xml
ns soapenv http://schemas.xmlsoap.org/soap/envelope/
ns eb http://www.ebxml.org/namespaces/messageHeader
ns wsse http://schemas.xmlsoap.org/ws/2002/12/secext
---
{
    soapenv#Envelope: {
        soapenv#Header: 
            eb#MessageHeader: {
                eb#From: {
                    eb#PartyId: {}
                },
                eb#To: {
                    eb#PartyId: {}
                },
                eb#CPAId: "XX",
                eb#ConversationId: vars.responseVars.conversationId,
                eb#Service: "DisplayInventoryRecordLLSRQ",
                eb#Action: "DisplayInventoryRecordLLSRQ",
                eb#MessageData: {
                    eb#MessageId: {},
                    eb#Timestamp: {},
                    eb#TimeToLive: {}
            },
            wsse#Security: {
                wsse#BinarySecurityToken: vars.responseVars.securityToken
            }
        },
        soapenv#Body: {
            DisplayInventoryRecordRQ: {
                POS: {
                    Source: {
                        PseudoCityCode: vars.requestVars.origin
                },
                FlightNumber: vars.requestVars.flightNumber,
                DepartureDate: vars.requestVars.departureDate,
                DepartureAirport: {
                    LocationCode: "ALL"
                },
                ArrivalAirport: {
                    LocationCode: vars.requestVars.destination, 
                    CodeContext: "IATA"
                    }   
                }           
            }       
        }
    }
}

XML передан Потребителю:

<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <eb:MessageHeader xmlns:eb="http://www.ebxml.org/namespaces/messageHeader">
            <eb:From>
                <eb:PartyId/>
            </eb:From>
            <eb:To>
                <eb:PartyId/>
            </eb:To>
            <eb:CPAId>XX</eb:CPAId>
            <eb:ConversationId>### Masked ###</eb:ConversationId>
            <eb:Service>DisplayInventoryRecordLLSRQ</eb:Service>
            <eb:Action>DisplayInventoryRecordLLSRQ</eb:Action>
            <eb:MessageData>
                <eb:MessageId/>
                <eb:Timestamp/>
                <eb:TimeToLive/>
            </eb:MessageData>
            <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
                <wsse:BinarySecurityToken>### Masked ###</wsse:BinarySecurityToken>
            </wsse:Security>
        </eb:MessageHeader>
    </soapenv:Header>
    <soapenv:Body>
        <DisplayInventoryRecordRQ>
            <POS>
                <Source>
                    <PseudoCityCode>XXX</PseudoCityCode>
                </Source>
                <FlightNumber>###</FlightNumber>
                <DepartureDate>2020-03-05</DepartureDate>
                <DepartureAirport>
                    <LocationCode>ALL</LocationCode>
                </DepartureAirport>
                <ArrivalAirport>
                    <LocationCode>XXX</LocationCode>
                    <CodeContext>IATA</CodeContext>
                </ArrivalAirport>
            </POS>
        </DisplayInventoryRecordRQ>
    </soapenv:Body>
</soapenv:Envelope>

Сообщение об ошибке:

ERROR 2020-03-05 13:01:25,188 [[MuleRuntime].io.10: [proc-ix-action-server-app].main-flow.BLOCKING @72b2e7e6] [event: 1594fcb1-5f1c-11ea-b89c-8c04ba8b4cea] org.mule.runtime.core.internal.exception.OnErrorContinueHandler: 
********************************************************************************
Message               : Missing <soap-env:Header> in <soap-env:Envelope>.
Error type            : WSC:SOAP_FAULT
Element               : get-inventory-subflow/processors/0/processors/1 @ proc-ix-action-server-app:main.xml:133 (Consume)
Element XML           : <wsc:consume operation="DisplayInventoryRecordRQ" doc:name="Consume" doc:id="fbeaeba3-f04c-4d40-bf87-bd63c1a8ac34" config-ref="Web_Service_Consumer_Config"></wsc:consume>

Рабочий вызов почтальона для сравнения:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
  <SOAP-ENV:Header>
    <eb:MessageHeader SOAP-ENV:mustUnderstand="1" eb:version="1.0">
      <eb:From>
        <eb:PartyId />
      </eb:From>
      <eb:To>
        <eb:PartyId />
      </eb:To>
      <eb:CPAId>XX</eb:CPAId>
      <eb:ConversationId>### Masked ###</eb:ConversationId>
      <eb:Service>DisplayInventoryRecordLLSRQ</eb:Service>
      <eb:Action>DisplayInventoryRecordLLSRQ</eb:Action>
      <eb:MessageData>
        <eb:MessageId />
        <eb:Timestamp />
        <eb:TimeToLive />
      </eb:MessageData>
    </eb:MessageHeader>
    <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext">
      <wsse:BinarySecurityToken valueType="String" EncodingType="wsse:Base64Binary">### Masked ###</wsse:BinarySecurityToken>
    </wsse:Security>
  </SOAP-ENV:Header>
  <SOAP-ENV:Body>
    <DisplayInventoryRecordRQ TimeStamp="2010-11-30T15:30:00-06:00" Version="1.2.1" xmlns="http://webservices.sabre.com/sabreXML/2003/07" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <POS>
            <Source PseudoCityCode="XXX"/>
        </POS>
        <FlightNumber>##</FlightNumber>
        <DepartureDate>2020-03-05</DepartureDate>
        <DepartureAirport LocationCode="XXX"/>
        <ArrivalAirport LocationCode="XXX" CodeContext="IATA"/>
    </DisplayInventoryRecordRQ>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

1 Ответ

0 голосов
/ 06 марта 2020

Вы должны передавать содержимое тела только как полезную нагрузку, а не элементы soap. Они добавляются потребителем веб-службы.

...