У меня есть веб-сервис, который был открыт с использованием комбинации Spring и JAX-WS. Мне удалось преобразовать его в POJO и выставить его с помощью Spring Integration в качестве активатора службы за входящим шлюзом веб-службы, который устанавливается как конечная точка по умолчанию для UriEndpointMapping. Так как есть другие устаревшие веб-службы, которые необходимо открыть, я изменил входящий шлюз с конечной точки по умолчанию на другое сопоставление. К сожалению, это изменение делает работу с пружинной интеграцией недоступной. Я пробовал сопоставлять его по URL и по назначению конечной точки, без каких-либо последствий. Вот соответствующий xml и код - я просто что-то пропустил?Конфигурация конфигурации Spring Web Service и Spring?
<int-ws:inbound-gateway id="reconGateway" request-channel="recon-input" marshaller="marshaller" unmarshaller="marshaller"/>
<int:service-activator method="saveArrangementApplicationDetails" input-channel="recon-input">
<bean id="arrangementApplicationReconService" class="package.ArrangementApplicationReconServiceImpl">
<constructor-arg ref="reconServiceHelper"/>
</bean>
</int:service-activator>
<bean class="org.springframework.ws.server.endpoint.mapping.UriEndpointMapping">
<property name="mappings">
<props>
<prop key="http://localhost:8081/intfacade-web/reconService">reconGateway</prop>
</props>
</property>
</bean>
ArrangementApplicationReconServiceImpl.java
public class ArrangementApplicationReconServiceImpl {
public ArrangementApplicationReconResponse saveArrangementApplicationDetails(
ArrangementApplicationReconRequest request)
throws AOSFaultException {
String traceId = request.getAosRequestHeader().getTraceId();
LOGGER.info("548A456D3AED4CF6917B8E238750A0FD - processing recon request trace id: " + traceId + " synchronously");
ArrangementApplicationReconResponse response = new ArrangementApplicationReconResponse();
AOSResponseHeader aosHeader = new AOSResponseHeader();
aosHeader.setTraceId(traceId);
response.setAosResponseHeader(aosHeader);
long result = 0L;
if (null == request.getApplicationId()) {
result = reconServiceHelper.saveArrangementApplicationDetails(request.getArrangementApplicationContainer(),
request.getDecisionType());
} else {
result = reconServiceHelper.saveArrangementApplicationDetails(request.getArrangementApplicationContainer(),
request.getDecisionType(), request.getApplicationId());
}
response.setApplicationId(result);
return response;
}
}
К сожалению, я уже пробовал это. Еще одно осложнение заключается в том, что я не знаю, какой класс Spring Integration использует по умолчанию в качестве компонента шлюза для сопоставления URL-адреса. Возможно, это моя проблема - я пытаюсь отобразить шлюз как конечную точку, а не активатор службы, который является реальной конечной точкой. Используя шлюз в качестве компонента конечной точки по умолчанию, служба корректно вызывается в активаторе службы, потому что она прослушивает тот же входной канал, что и шлюз. – Alex
Правильно: «запрос-канал» любого «входящего-шлюза» является входом для потока интеграции, и сообщение от него отправляется точно вашему активатору-услуге –