2016-07-18 1 views
2

SOAP 용 wso2 esb 4.8.1 버전을 API로 변환하여 사용하고 있습니다. xsi 값으로 SOAP 요청이 있습니다. 스크립트 중재자와 적절한 비누 요청을 생성 한 후 기대되는 응답을 얻었습니다. 하지만 응답에 문제가 있습니다. 비누 반응을 json으로 변환 할 필요가 없기 때문입니다. 내가 axis2와 함께 적절한 json 응답을 얻지 못하는 시퀀스 um을 따라 가려고했을 때. 이 비누 반응을 json으로 올바르게 변환하려면 어떻게해야합니까?WS02esb에서 xsi 값을 사용하여 SOAP 응답을 json으로 변환하는 방법

비누 반응입니다.

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"  xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<soapenv:Body> 
<ns1:easyDownloadResponse xmlns:ns1="http://usermanage.ivas.huawei.com" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
<easyDownloadReturn href="#id0"/> 
</ns1:easyDownloadResponse> 
<multiRef xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://response.usermanage.ivas.huawei.com" id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:EasyDownloadResp"> 
<eventClassName xsi:type="xsd:string" xsi:nil="true"/> 
<failedResources xsi:type="soapenc:Array" xsi:nil="true"/> 
<operationID xsi:type="xsd:long">0</operationID> 
<resultCode xsi:type="xsd:int">0</resultCode> 
<resultInfo xsi:type="xsd:string" xsi:nil="true"/> 
<returnCode xsi:type="xsd:string">000000</returnCode> 
<toneTransactionID xsi:type="soapenc:Array" xsi:nil="true"/> 
<transactionID xsi:type="xsd:string" xsi:nil="true"/> 
</multiRef> 
</soapenv:Body> 
</soapenv:Envelope> 

내가

{"easyDownloadResponse":{"@encodingStyle":"http://schemas.xmlsoap.org/soap/encoding/","easyDownloadReturn":{"@href":"#id0"}}} 

받고 있어요 응답이

<outSequence xmlns="http://ws.apache.org/ns/synapse"> 
    <property name="messageType" value="application/json" scope="axis2" type="STRING"></property> 
    <send></send> 
</outSequence> 

모든 답은 매우 환영합니다 내 밖으로 순서입니다.

답변

0

마지막으로 문제의 해결책을 찾았습니다. 우리가 사용하는 정상적인 경우

<property name="messageType" value="application/json" scope="axis2" type="STRING"></property> 

그러나이 axis2 속성은 복잡한 비누 응답을 xsi와 같이 json으로 변환 할 수 없습니다. 그 때문에 다음 axis2 속성을 사용해야합니다. 그런 다음 우리가 기대했던대로 전체 비누 반응을 Json으로 변환합니다.

<property name="messageType" value="application/json/badgerfish" scope="axis2" type="STRING"></property> 

이것은 전체 내용입니다.

<outSequence xmlns="http://ws.apache.org/ns/synapse"> 
    <property name="messageType" value="application/json/badgerfish" scope="axis2" type="STRING"></property> 
    <send></send> 
</outSequence> 
0

정확한 json 형식 1을 얻으려면 payload mediator을 시도해보십시오. 그들이 그러나 아직도 당신이 기본적으로

$ ESB_HOME/저장소/conf의/축 2/axis2.xml

<!--messageFormatter contentType="application/json" 
class="org.apache.axis2.json.JSONStreamFormatter"/--> 

<!--messageBuilder contentType="application/json" 
class="org.apache.axis2.json.JSONStreamBuilder"/--> 

에 다음 줄의 주석을 해제 할 수 있습니다, JSON 메시지는 XML로 변환 PayloadFactor 조정자가 수신합니다. 그러나 JSON 스트림 포맷터 및 빌더를 활성화하면 들어오는 JSON 메시지는 JSON 형식으로 유지됩니다.

또한 스크립트 중개자를 사용하여 (나중에) json 응답을 수정할 수 있습니다. 참조 this sample

+0

내 경우에는 스크립트 조정자로 구현해야합니다. 페이로드 팩토리를 사용할 수 없으며 선택적 매개 변수를 확인해야합니다. ""간단한 사용으로 xml 응답을 json으로 변환 할 수 있습니다. 하지만 이제는 "XSI"가 내 응답에도 포함되어 있고 json에 대한 xml 응답을 제대로 변환 할 수 없습니다. –

+0

속성 중재자가 XML 형식을 JSON으로 변환하는 데 사용하기 때문에 이름 지정 규칙과 다른 방식으로 반응합니다. 따라서 스크립트 중개자를 사용하고 json과 같은 스크립팅 언어를 통해 json fromat를 정의 할 수 있습니다. 당신은 doc을 통해 샘플을 볼 수 있습니다 : https://docs.wso2.com/display/ESB481/JSON+Support –

+0

당신은 순서에 대한 샘플 코드를 제공해 주시겠습니까? –

관련 문제