Я пытаюсь написать configure gateway, который должен принять полное сообщение SOAP, а затем передать его другому провайдеру SOAP (включая все заголовки SOAP первого запроса).Spring Integration должен направлять сообщение (с заголовками SOAP)
То, что я сделал до сих пор:
1) web.xml
MessageDispatcherServlet with Mapping:
<servlet-mapping>
<servlet-name>spring-ws</servlet-name>
<url-pattern>/appservices/*</url-pattern>
</servlet-mapping>
2) Конфигурация с конечной точки Mapping
<bean class="org.springframework.ws.server.endpoint.mapping.UriEndpointMapping">
<property name="defaultEndpoint" ref="ws-in-gw"/>
</bean>
3) Конфигурация Spring Integration inbound- шлюз и исходящий-шлюз
<int-ws:inbound-gateway id="ws-in-gw"
request-channel="in"
reply-channel="out"
mapped-request-headers="*" />
<int:channel id="in" />
<int:channel id="out" />
<int-ws:outbound-gateway
id="ws-out-gw-status"
request-channel="in-status"
reply-channel="out-status"
uri="http://${delegationServer}/${delegation.contextroot}/soap/AnotherService"
interceptor="soapEnricher"
</int-ws:outbound-gateway>
<bean id="soapEnricher" class="foo.bar.SoapHeaderEnricher" />
public class SoapHeaderEnricher implements ClientInterceptor {
@Override
public boolean handleRequest(MessageContext messageContext) throws WebServiceClientException {
try {
SoapMessage soapMessage = (SoapMessage) messageContext.getRequest();
SoapHeader sh = soapMessage.getSoapHeader();
// can use sh.addHeaderElement(new QName(...)) now, but where are the original Headers???
} catch() {
}
}
Моя первая проблема заключалась в том, что исходные заголовки SOAP были разрезаны, поэтому я представил атрибут «сопоставленный запрос-заголовки =» * «» на входящем шлюзе. Когда я теперь настроить проводной кран, я вижу заголовки (myToken: MySecretToken) принимаются:
DEBUG 10:46:53 - [Payload DOMSource [email protected]][Headers={errorChannel=org.springframewor[email protected]43456ff4, myToken:MySec[email protected]3b91ead, ...}]
Это SOAP сообщение для моего теста:
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:stat="http://status.service.promakler.provinzial.com/">
<soapenv:Header>
<myToken:MySecretToken xmlns=""
xmlns:myToken="http://foo.bar">12345</myToken:MySecretToken>
</soapenv:Header>
<soapenv:Body>
<stat:getStatus/>
</soapenv:Body>
</soapenv:Envelope>
Так Заголовки теперь в моем сообщении, но в ClientInterceptor нет способа получить заголовки (только полезная нагрузка) ?! Я могу добавить новые заголовки, но как я могу получить исходный заголовок? Может кто-нибудь дать мне подсказку (или, возможно, есть даже тихое простое решение ??)
С уважением Тимо
Я пытался добавить специальный Mapper (<идентификатор = класс компонента «soapHeaderMapper» = «com.provinzial.promakler.tgicgateway.mapper.PromaklerSoapHeaderMapper» />), который расширяет DefaultSoapHeaderMapper, но метод «populateUserDefinedHeader» никогда не называют , Как это может быть, когда проводник показывает мне заголовок сообщения? –
Настроить его с помощью ' ' –
Я не знаю, почему это не работает, но я нашел решение: я переопределяю метод fromHeadersToRequest и помещаю его вручную в цель , Большое спасибо ! –