Попытка вызова веб-службы Sabre, но с ошибкой SOAP, указанной выше. Очевидно, что заголовок не отсутствует. В этот момент ставится в тупик.
Входящие параметры передаются в процессор сообщений Transform, а полезная нагрузка преобразуется в XML и передается в Web-приемник для выполнения внешнего вызова. Конфигурация Consumer использует WSDL, предоставленный Sabre.
Я уверен, что мне не хватает чего-то простого. Любая помощь приветствуется.
Код данных в процессоре преобразования:
%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>