2015-09-28 52 views
0

我正在使用wso2esb 4.9.0, 我有一種服務,它從數據庫中選擇數據並以JSON格式給出響應。如何在wso2esb中避免JSON響應中的jsonObject 4.9.0

代理服務:

<proxy xmlns="http://ws.apache.org/ns/synapse" 
     name="GetMquestionMobile3.0" 
     transports="https http" 
     startOnLoad="true" 
     trace="disable" 
     statistics="enable"> 
    <description/> 
    <target> 
     <inSequence onError="fault"> 
     <property name="messageType" value="application/json" scope="axis2"/> 
     <property name="FORCE_ERROR_ON_SOAP_FAULT" value="true"/> 
     <property name="userid" expression="get-property('transport', 'userid')"/> 
     <property name="ModifiedOn" expression="get-property('transport', 'ModifiedOn')"/> 
     <property name="username" expression="get-property('transport', 'username')"/> 
     <property name="password" expression="get-property('transport', 'password')"/> 
     <property name="PartyBranchID" 
        expression="//FieldValue/text()" 
        scope="default" 
        type="STRING"/> 
     <property name="usercode" 
        expression="fn:substring-before(get-property('username'),'|')" 
        scope="default" 
        type="STRING"/> 
     <property name="clientid" 
        expression="fn:substring-after(get-property('username'),'|')" 
        scope="default" 
        type="STRING"/> 
<payloadFactory media-type="xml"> 
      <format> 
       <p:Getmquestions_Mobile xmlns:p="http://ws.wso2.org/dataservice"> 
        <p:clientid>$1</p:clientid> 
        <p:modifiedon>$2</p:modifiedon> 
       </p:Getmquestions_Mobile> 
      </format> 
      <args> 
       <arg evaluator="xml" expression="get-property('clientid')"/> 
       <arg evaluator="xml" expression="get-property('ModifiedOn')"/> 
      </args> 
     </payloadFactory> 
     <send receive="MquestionMobile_Seq33.0"> 
      <endpoint> 
       <address uri="http://localhost:9764/services/mquestions_DataService3.0/" 
         format="soap11"> 
        <suspendOnFailure> 
        <errorCodes>101500,101501,101506,101507,101508,101503,50000</errorCodes> 
        <initialDuration>30</initialDuration> 
        <progressionFactor>1.0</progressionFactor> 
        <maximumDuration>300</maximumDuration> 
        </suspendOnFailure> 
       </address> 
      </endpoint> 
     </send> 
</inSequence> 
     <outSequence onError="fault"> 
     <send/> 
     </outSequence> 
    </target> 
</proxy> 

順序:

<sequence xmlns="http://ws.apache.org/ns/synapse" 
      name="MquestionMobile_Seq33.0" 
      statistics="enable"> 
    <property name="messageType" value="application/json" scope="axis2"/> 
    <property name="FORCE_ERROR_ON_SOAP_FAULT" value="true"/> 
    <property name="HTTP_METHOD" value="POST" scope="axis2"/> 
    <property xmlns:ns="http://org.apache.synapse/xsd" 
      xmlns:s="http://ws.wso2.org/dataservice" 
      name="Datalist" 
      expression="//s:Datalist" 
      scope="default" 
      type="STRING"/> 
    <property xmlns:ns="http://org.apache.synapse/xsd" 
      xmlns:s="http://ws.wso2.org/dataservice" 
      name="Total" 
      expression="count(//s:Datalist)" 
      scope="default" 
      type="STRING"/> 
<filter xmlns:ns="http://org.apache.synapse/xsd" 
      xpath="get-property('Total')='0.0'"> 
     <then> 
     <property name="RESPONSE" value="true" scope="default" type="STRING"/> 
     <payloadFactory media-type="json"> 
      <format> 
     {"ResponseJSON":{"Body":{"Datalist":"Not Found"},"Status":"404"}} 
    </format> 
      <args/> 
     </payloadFactory> 
     <send/> 
     </then> 
     <else> 
     <property name="RESPONSE" value="true" scope="default" type="STRING"/> 
     <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/> 
     <payloadFactory media-type="json"> 
      <format>{"ResponseJSON" : {"Body" :$1,"Status" :"200","Total" :"$2"}}</format> 
      <args> 
       <arg evaluator="json" expression="$.Body"/> 
       <arg evaluator="xml" expression="get-property('Total')"/> 
      </args> 
     </payloadFactory> 
     <send/> 
     </else> 
    </filter> 
</sequence> 

該服務給我的答覆,如下面

{"jsonObject":{"ResponseJSON" : 
    {"Body" : 
    {"Datalist":[ 
    {"ComboValues":"Yes,No","QuestionType":0,"Tag":-1,"Question":"LogBooks","IsAVPT":-1,"QuestionId":989181535979317,"DataSize":-1.0,"ToolTip":-1,"IsFollowup":-1}, 
    {"ComboValues":"Yes,No","QuestionType":0,"Tag":null,"Question":"MasterRegister","IsAVPT":-1,"QuestionId":989181536700214,"DataSize":-1.0,"ToolTip":null,"IsFollowup":-1}, 
    {"ComboValues":null,"QuestionType":0,"Tag":null,"Question":"OthersRecords","IsAVPT":-1,"QuestionId":989181536732983,"DataSize":-1.0,"ToolTip":null,"IsFollowup":-1}]},"Status":"200","Total":"3.0"}}} 

我不希望看到的JSONObject在我響應,我如何避免這在我的JSON響應,並得到如下響應

{"ResponseJSON" : 
     {"Body" : 
     {"Datalist":[ 
     {"ComboValues":"Yes,No","QuestionType":0,"Tag":-1,"Question":"LogBooks","IsAVPT":-1,"QuestionId":989181535979317,"DataSize":-1.0,"ToolTip":-1,"IsFollowup":-1}, 
     {"ComboValues":"Yes,No","QuestionType":0,"Tag":null,"Question":"MasterRegister","IsAVPT":-1,"QuestionId":989181536700214,"DataSize":-1.0,"ToolTip":null,"IsFollowup":-1}, 
     {"ComboValues":null,"QuestionType":0,"Tag":null,"Question":"OthersRecords","IsAVPT":-1,"QuestionId":989181536732983,"DataSize":-1.0,"ToolTip":null,"IsFollowup":-1}]},"Status":"200","Total":"3.0"}} 

DS響應:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <Body xmlns="http://ws.wso2.org/dataservice"> 
     <Datalist> 
      <Question>LogBooks</Question> 
      <QuestionId>989181535979317</QuestionId> 
      <QuestionType>0</QuestionType> 
      <ComboValues>Yes,No</ComboValues> 
      <IsFollowup>-1</IsFollowup> 
      <IsAVPT>-1</IsAVPT> 
      <DataSize>-1.0</DataSize> 
      <ToolTip>-1</ToolTip> 
      <Tag>-1</Tag> 
      <weightage>1.00</weightage> 
     </Datalist> 
     <Datalist> 
      <Question>Master Register</Question> 
      <QuestionId>989181536700214</QuestionId> 
      <QuestionType>0</QuestionType> 
      <ComboValues>Yes,No</ComboValues> 
      <IsFollowup>-1</IsFollowup> 
      <IsAVPT>-1</IsAVPT> 
      <DataSize>-1.0</DataSize> 
      <ToolTip/> 
      <Tag/> 
      <weightage>1.00</weightage> 
     </Datalist> 
     <Datalist> 
      <Question>Others Records</Question> 
      <QuestionId>989181536732983</QuestionId> 
      <QuestionType>0</QuestionType> 
      <ComboValues/> 
      <IsFollowup>-1</IsFollowup> 
      <IsAVPT>-1</IsAVPT> 
      <DataSize>-1.0</DataSize> 
      <ToolTip/> 
      <Tag/> 
      <weightage>1.00</weightage> 
     </Datalist> 
      </Body> 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

請粘貼您的DS XML響應來模擬您的方案。 –

+0

嗨豪爾赫我編輯了我的問題與DS響應,請檢查。 – user4045063

+0

您是通過Soap還是Json請求發送的?你應該使用Json路徑(json-eval($。))來提取那些第一個屬性,如果它的Json。如果它的soap然後刪除application/json屬性。 Jsonobject是Json的xml表示,所以我認爲可能會有太多的轉換在您的流程中進行。嘗試在你的序列中保留xml,應用你的邏輯,發送到outSeq,然後在那裏做出轉換到Json之前做出反應 – JavaMastaRSA

回答

1

您可以使用充實調解員從響應清除體內的JSONObject像下面。

<enrich> 
    <source clone="true" xpath="$body//jsonObject//ResponseJSON"/> 
    <target type="body"/> 
</enrich> 

您可以在添加介體並添加更改後的主體後添加日誌介體。

希望這會幫助你。

0

在ESB中介體通信中發生SOAP消息。當您發送JSON請求或ESB收到JSON響應時,ESB會通過添加標記將其轉換爲xml/soap消息來防止多根xml。 嘗試使用

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

發送/調用之前。這會自動從響應中刪除你的jsonObject。但如果你要轉換的響應從JSON XML,那麼你需要用豐富調解員手動修改

使axis2.xml能確保JSON格式

相關問題