2014-01-16 5 views
1

WSO2의 ESB에서 SOAP 요청으로 REST 요청을 변환하려고합니다. 따라서 ESB에서 REST 끝점을 제공하는 API를 만들었습니다. 이 API에서 각 리소스에는 Payload Factory Mediator가 포함 된 In-Sequence가 있습니다. 이 조정자는 REST 요청을 SOAP 메시지로 변환합니다. SOAP 메시지는 이전에 정의한 사용자 정의 ESB 프록시로 전송됩니다.WSO2 ESB Payload Factory가 잘못된 SOAP 봉투를 만듭니다.

여기에 문제가 있습니다. REST 요청을 보내면 요청이 처리되어 SOAP로 변환되지만 응답 HTML 상태 코드는 500입니다. 결과적으로 ESB에서 SOAP 메시지 추적기를 활성화하여 어떤 메시지 Payload Factory Mediator가 작성한 메시지가 어떻게 나타나는지 확인합니다.

페이로드 공장의 결과 SOAP 메시지는 다음과 같이 분명히 잘못된 같습니다

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Body> 
    <soapenv:Envelope> 
     <soapenv:Body> 
      <mms:getCarData xmlns:mms="mms.cardiag"/> 
     </soapenv:Body> 
    </soapenv:Envelope> 
    </soapenv:Body> 

가 쉽게 볼 수있는 것처럼, 메시지에 만든 두 번째 <soapenv:Envelope> + 몸이있다. WS02 문서의 Example 800을 매우 자세히 살펴본 이후로 왜 이런 일이 발생하는지 알 수 없습니다.

내 REST API에도 리소스 구현을 제공하므로 Payload Factory Mediator 구성을 확인할 수 있습니다. 나는 중요한 것을 놓치고 있다고 확신하지만, 불행히도 무엇을 알아낼 수는 없다. 당신의 도움에 대한

<resource methods="GET" uri-template="/cardata"> 
    <inSequence> 
    <payloadFactory media-type="xml"> 
     <format> 
      <mms:getCarData xmlns:mms="mms.cardiag"/> 
     </format> 
     <args/> 
    </payloadFactory> 
    <log level="full" category="TRACE"/> 
    <send> 
     <endpoint> 
      <address uri="http://wso2-1:8280/services/TestProxy" format="soap11"/> 
     </endpoint> 
    </send> 
    </inSequence> 
    <outSequence> 
    <send/> 
    </outSequence> 

감사합니다!

답변

3

형식이 text/xml이라고 가정 할 때 헤더 조정자를 사용하여 SOAP 동작을 설정해야합니다. SOAP 액션이 없다면, 빈 액션을 설정할 수 있습니다 :

<header name="Action" value="&quot;&quot;"/> 
+0

정확히 작동하게 만들었습니다. 고마워요! – cmdaltent