2017-10-05 59 views
1

다양한 ReST/JSON 및 SOAP 엔드 포인트를 (성공적으로) 통합하는 프로젝트에서 Spring Integration을 사용하고 있습니다. 이제 Plain-Old-Xml-over-HTTP를 허용하도록 구성된 BusinessWorks 인스턴스를 호출해야합니다. "Spring Integration in Action book"에서 int-ws : outbound-gateway를 사용해야한다는 힌트를 얻었습니다. 이 구성이 올바른 요청을 생성하지만 SOAP에서 : 나는 POX와 페이로드 (NO SOAP 봉투)에서 개체를 보내려면이를 구성하는 방법을 알아낼 수 없습니다Spring Integration에서 POX 웹 서비스를 호출합니다.

<int-ws:outbound-gateway 
    uri="..." 
    request-channel="request" reply-channel="reply" 
    marshaller="marshaller" unmarshaller="unmarshaller"/> 

.

<int-ws:outbound-gateway 
    uri="..." 
    request-channel="request" reply-channel="reply" 
    marshaller="marshaller" unmarshaller="unmarshaller" 
    message-factory="poxMessageFactory"/> 
<bean id="poxMessageFactory" 
    class="org.springframework.ws.pox.dom.DomPoxMessageFactory"/> 

요청은 XML로 제대로 전환하지만, 요청의 본문은 (봄 통합 페이로드에 존재하는 물체의 흔적) 빈없는 것 : 나는이 시도했다. 누군가 내가 잘못하고있는 일이나 내가하려는 일을 성취하는 방법을 말해 줄 수 있습니까? if (message instanceof SoapMessage) {

public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException { 
     Object payload = this.requestMessage.getPayload(); 
     if (message instanceof SoapMessage) { 
      this.doWithMessageInternal(message, payload); 
      AbstractWebServiceOutboundGateway.this.headerMapper 
        .fromHeadersToRequest(this.requestMessage.getHeaders(), (SoapMessage) message); 
      if (this.requestCallback != null) { 
       this.requestCallback.doWithMessage(message); 
      } 
     } 

    } 

에주의 :

답변

0

나는 이것이 AbstractWebServiceOutboundGateway의 누락 생각합니다.

그래서 실제로 메시지가 다른 유형 일 수 있다는 사실을 놓칩니다.

문제에 관해서는 JIRA bug을 열어주세요.

한편 해결 방법으로 당신이 상호 작용 marshalSendAndReceive() 방법을 사용하여 <service-activator>에서 호출 할 수 있습니다 대신 직접 <int-ws:outbound-gateway>WebServiceTemplate를 사용하도록 건의 할 것입니다.

+0

감사합니다. 나는이 권위있는 대답이 주제를 닫는다 고 생각합니다 :-) 나는 JIRA 버그를 열었습니다. 이 임시 해결책을 사용하는 것만으로도 빠른 시도를했지만, 우리가 호출 한 서비스가 같은 회사에서 관리되기 때문에 그들은 SOAP을 받아들이도록 서비스를 재구성합니다. –

+0

예! JIRA https://jira.spring.io/browse/INT-4355가 최근에 수정되었습니다. 필요한 경우 다음 유지 보수 버전을 최대한 빨리 릴리스 할 수 있습니다. –

+0

오! 미안해.이 마지막 코멘트를 놓쳤다. 고맙습니다 만, 이제 다음 버전에서 배송을 기다릴 수 있습니다. –