2015-04-07 5 views
1

У меня есть веб-сервис, который был открыт с использованием комбинации 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; 
} 
} 

ответ

1

Похоже, ответ для вас в UriEndpointMapping JavaDocs:

* Implementation of the {@code EndpointMapping} interface to map from the full request URI or request URI path to 
* endpoint beans. Supports both mapping to bean instances and mapping to bean names: the latter is required for 
* prototype handlers. 

Таким образом, вы должны использовать endpointMap свойство, а не mappings.

И далее:

* <p>When the {@link #setUsePath(boolean) usePath} property is enabled, the mapping will be based on the URI path rather 
* than the full URI. 

Это для случая, когда вы действительно не должны использовать этот полный адрес с хост/порт.

+0

К сожалению, я уже пробовал это. Еще одно осложнение заключается в том, что я не знаю, какой класс Spring Integration использует по умолчанию в качестве компонента шлюза для сопоставления URL-адреса. Возможно, это моя проблема - я пытаюсь отобразить шлюз как конечную точку, а не активатор службы, который является реальной конечной точкой. Используя шлюз в качестве компонента конечной точки по умолчанию, служба корректно вызывается в активаторе службы, потому что она прослушивает тот же входной канал, что и шлюз. – Alex

+0

Правильно: «запрос-канал» любого «входящего-шлюза» является входом для потока интеграции, и сообщение от него отправляется точно вашему активатору-услуге –

Смежные вопросы