2016-04-28 36 views
0

下面是在WSO2 ESB 4.8.1中實現的代理,此代理代碼旁邊顯示了二進制格式的返回響應。響應預計在xml響應中。如何將剩餘服務響應從二進制轉換爲WSO2 ESB中的xml 4.8.1

注意:此代理按預期在WSO2 ESB 4.9.0中返回xml響應。

<?xml version="1.0" encoding="UTF-8"?> 
<proxy xmlns="http://ws.apache.org/ns/synapse" 
     name="postIDMPCall-withheader" 
     transports="https http" 
     startOnLoad="true" 
     trace="disable"> 
    <description/> 
    <target> 
     <inSequence> 
     <in> 
      <property name="ContentType" value="text/xml" scope="axis2" type="STRING"/> 
      <property name="HTTP_METHOD" value="POST" scope="axis2" type="STRING"/> 
      <payloadFactory media-type="xml"> 
       <format> 
        <organizationList xmlns=""> 
        <Organization> 
         <sourceRecordId>132</sourceRecordId> 
         <idmpRecordId>0</idmpRecordId> 
         <orgName>depcomp</orgName> 
         <smeNumber/> 
         <psmflCode/> 
         <countryCode>AF</countryCode> 
         <shortName/> 
         <remarks/> 
         <address>addressgger</address> 
         <city>mys</city> 
         <state>kar</state> 
         <postalCode>234</postalCode> 
         <contactPhone/> 
         <phoneExtension/> 
         <faxNumber/> 
         <faxExtension/> 
         <webSite/> 
         <active>YES</active> 
         <organizationId/> 
        </Organization> 
        </organizationList> 
       </format> 
       <args/> 
      </payloadFactory> 
      <log> 
       <property name="before call" expression="$body"/> 
      </log> 
      <property name="user" value="system" scope="default" type="STRING"/> 
      <property name="password" 
         value="Password2#" 
         scope="default" 
         type="STRING"/> 
      <header name="_user" scope="transport" expression="get-property('user')"/> 
      <header name="_password" 
        scope="transport" 
        expression="get-property('password')"/> 
      <log> 
       <property name="header" expression="get-property('user')"/> 
      </log> 
      <call blocking="true"> 
       <endpoint> 
        <address uri="http://<ipaddress>:<port>/<rest-Services-path>/UpdateOrganization" 
          format="rest"/> 
       </endpoint> 
      </call> 
      <log> 
       <property name="after call" expression="$body"/> 
      </log> 

<property name="messageType" value="text/xml" scope="axis2" type="STRING"/>    <header name="To" scope="default" action="remove"/> 
       <property name="RESPONSE" value="true"/> 
       <send/> 
       <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/> 
       <drop/> 
      </in> 
      </inSequence> 
     </target> 
    </proxy> 

1.Logs:

[ESB] [2016-05-04 15:10:27,222] INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: /services/postIDMPCall-withheader.postIDMPCall-withheaderHttpSoap12Endpoint, WSAction: urn:mediate, SOAPAction: urn:mediate, MessageID: urn:uuid:b5814442-977e-43ed-9cc9-f60faa46c5c2, Direction: request, before call = <soapenv:Body xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><organizationList><Organization><sourceRecordId>132</sourceRecordId><idmpRecordId>0</idmpRecordId><orgName>depcomp</orgName><smeNumber></smeNumber><psmflCode></psmflCode><countryCode>AF</countryCode><shortName></shortName><remarks></remarks><address>addressgger</address><city>mys</city><state>kar</state><postalCode>234</postalCode><contactPhone></contactPhone><phoneExtension></phoneExtension><faxNumber></faxNumber><faxExtension></faxExtension><webSite></webSite><active>YES</active><organizationId></organizationId></Organization></organizationList></soapenv:Body> {org.apache.synapse.mediators.builtin.LogMediator} 
TID: [0] [ESB] [2016-05-04 15:10:27,230] INFO {org.apache.synapse.core.axis2.TimeoutHandler} - This engine will expire all callbacks after : 120 seconds, irrespective of the timeout action, after the specified or optional timeout {org.apache.synapse.core.axis2.TimeoutHandler} 
TID: [0] [ESB] [2016-05-04 15:10:31,066] INFO {org.apache.synapse.mediators.builtin.LogMediator} - To: http://www.w3.org/2005/08/addressing/anonymous, WSAction: , SOAPAction: , MessageID: urn:uuid:cee9a5c2-1f64-4ff3-a6bd-712785567f8d, Direction: request, after call = <soapenv:Body xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><axis2ns1:binary xmlns:axis2ns1="http://ws.apache.org/commons/ns/payload">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8b3JnYW5pemF0aW9uUmVzcG9uc2VMaXN0PgogICAgPE9yZ2FuaXphdGlvbj4KICAgICAgICA8c291cmNlUmVjb3JkSWQ+MTMyPC9zb3VyY2VSZWNvcmRJZD4KICAgICAgICA8aWRtcFJlY29yZElkPjE3MTY5PC9pZG1wUmVjb3JkSWQ+CiAgICAgICAgPHN1Y2Nlc3M+U1VDQ0VTUzwvc3VjY2Vzcz4KICAgICAgICA8ZXJyb3I+Tm8gRXJyb3JzPC9lcnJvcj4KICAgIDwvT3JnYW5pemF0aW9uPgo8L29yZ2FuaXphdGlvblJlc3BvbnNlTGlzdD4K</axis2ns1:binary></soapenv:Body> {org.apache.synapse.mediators.builtin.LogMediator} 

2.響應以二進制格式接收:

<axis2ns6:binary xmlns:axis2ns6="http://ws.apache.org/commons/ns/payload">PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pgo8b3JnYW5pemF0aW9uUmVzcG9uc2VMaXN0PgogICAgPE9yZ2FuaXphdGlvbj4KICAgICAgICA8c3VjY2Vzcz5GQUlMVVJFPC9zdWNjZXNzPgogICAgICAgIDxlcnJvcj5SZWNvcmQgaXMgbm90IHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuIFBsZWFzZSBQcm92aWRlIHZhbGlkIFJlcXVlc3QgWE1MPC9lcnJvcj4KICAgIDwvT3JnYW5pemF0aW9uPgo8L29yZ2FuaXphdGlvblJlc3BvbnNlTGlzdD4K</axis2ns6:binary>  

回答

0

要將XML有效載荷轉換爲JSON,所述MessageType屬性設置爲應用程序/ json在將消息發送到端點之前在axis2範圍內。

<property name="messageType" value="application/json" scope="axis2"/> 
+0

期待xml響應,但返回二進制格式。我想知道爲什麼這是返回二進制時,休息服務被調用?否則,我們可以選擇將二進制響應轉換爲xml響應。我試着改變運輸到nhttp,但這是行不通的。 –

0

我不知道爲什麼你只有inSequence。 而你在inSequence裏面的呼叫內容前後記錄。

你可以使用outSequence和檢查?即

<outSequence> 
    <property name="messageType" value="application/json" scope="axis2"/> 
    <send/> 
</outSequence> 
0

請檢查您是否啓用了/repository/conf/axis2/axis2.xml中的二進制消息生成器/格式化程序。如果是這樣,請禁用二進制消息構建器並使用默認消息構建器/格式化器並再次嘗試。

相關問題