Как установить заголовок конверта SOAP в Spring Integration с данными из int-http: inbound-gateway? - PullRequest
0 голосов
/ 29 октября 2018

Я попытался создать простой проект интеграции пружин, в котором я получаю запрос REST и преобразовываю его в запрос SOAP. Что-то вроде:

<int-http:inbound-gateway id="rest-inbound-gateway" request-channel="restRequestChannel"
    reply-channel="restOutputChannel" supported-methods="POST"
    path="/somepath" request-payload-type="com.something.RequestObject">
        <int-http:request-mapping consumes="application/json" produces="application/json" />
</int-http:inbound-gateway>

<int:transformer ref="RestToSoapTransformer" method="transform"
                 input-channel="restRequestChannel" output-channel="transformedChannel"/>

<int-ws:outbound-gateway id="marshallingGateway"
    request-channel="transformedChannel" reply-channel="restOutputChannel"
    uri="http://localhost:8088/mockSoapBinding" marshaller="marshaller"
    message-sender="messageSender"
    unmarshaller="marshaller" >
</int-ws:outbound-gateway>

Но некоторые сведения, которые содержатся в запросе REST, необходимо поместить в заголовок конверта SAOP, а не в тело конверта. Например.

Запрос на отдых:

{
    "foo": "foo",
    "bar": "bar"
}

И SOAP-запрос должен быть:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <foo>foo</foo>
    </soapenv:Header>
    <soapenv:Body>
         <bar>bar</bar>
    </soapenv:Body>
</soapenv:Envelope>

Как я могу это сделать? Трансформатор создает только мыльное тело, а в перехватчике или в устройстве отображения заголовков у меня больше нет исходного запроса. Есть ли способ сделать это?

1 Ответ

0 голосов
/ 29 октября 2018

См. документацию .

Заголовки сообщений WS

Шлюз Spring Integration WebService автоматически отобразит заголовок SOAP Action. Он будет скопирован по умолчанию в и из Spring Integration MessageHeaders, используя DefaultSoapHeaderMapper.

Конечно, вы можете передать свою собственную реализацию определенных сопоставителей заголовков SOAP, поскольку шлюзы имеют соответствующие свойства для поддержки этого.

Любые пользовательские заголовки SOAP НЕ будут копироваться в сообщение SOAP или из него, если только это явно не указано в свойствах requestHeaderNames и / или replyHeaderNames объекта DefaultSoapHeaderMapper.

...

...