【问题标题】:Json output required at client side客户端需要 Json 输出
【发布时间】:2014-06-05 20:14:32
【问题描述】:

我正在使用 wso2 4.7.0 和 wso2dss 3.0.0..我创建了一个服务,我的客户端在请求中发送客户端代码,我必须使用客户端名称和客户端 ID 进行响应。我已经创建了一个代理服务和序列它喜欢:

<inSequence onError="fault">
         <property name="messageType" value="application/json" scope="axis2"/>
         <property name="clientcode"
                   expression="//clientcode/text()"
                   scope="default"
                   type="STRING"/>
         <payloadFactory>
            <format>
               <p:Select_Clientid_Op xmlns:p="http://ws.wso2.org/dataservice">
                  <xs:clientcode xmlns:xs="http://ws.wso2.org/dataservice">$1</xs:clientcode>
               </p:Select_Clientid_Op>
            </format>
            <args>
               <arg evaluator="xml" expression="//clientcode/text()"/>
            </args>
         </payloadFactory>
         <send receive="Client_Seq2.0">
            <endpoint>
               <address uri="http://localhost:9764/services/muser_DataService2.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>

顺序:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="Client_Seq3.0">
   <property name="messageType" value="application/json" scope="axis2"/>
   <property name="FORCE_ERROR_ON_SOAP_FAULT" value="true"/>
   <property xmlns:ns="http://org.apache.synapse/xsd" xmlns:s="http://ws.wso2.org/dataservice" name="clientid" expression="//s:clientid/text()" scope="default" type="STRING"/>
   <property xmlns:ns="http://org.apache.synapse/xsd" xmlns:s="http://ws.wso2.org/dataservice" name="clientname" expression="//s:clientname/text()" scope="default" type="STRING"/>
   <property xmlns:ns="http://org.apache.synapse/xsd" xmlns:s="http://ws.wso2.org/dataservice" name="clientshortname" expression="//s:clientshortname/text()" scope="default" type="STRING"/>
   <log>
      <property xmlns:ns="http://org.apache.synapse/xsd" name="clientid" expression="get-property('clientid')"/>
   </log>
   <filter xmlns:ns="http://org.apache.synapse/xsd" xpath="get-property('clientid')=''">
      <then>
         <payloadFactory>
            <format>
               <ResponseJSON xmlns="">
                  <Exception> Data Not Found</Exception>
                  <Status>404</Status>
               </ResponseJSON>
            </format>
         </payloadFactory>
         <send/>
      </then>
      <else>
         <payloadFactory>
            <format>
               <ResponseJSON xmlns="">
                  <Body>
                     <Datalist>
                        <clientid>$1</clientid>
                        <clientname>$2</clientname>
                        <clientshortname>$2</clientshortname>
                     </Datalist>
                  </Body>
                  <Status>200</Status>
               </ResponseJSON>
            </format>
            <args>
               <arg xmlns:s="http://ws.wso2.org/dataservice" expression="//s:clientid/text()" evaluator="xml"/>
               <arg xmlns:s="http://ws.wso2.org/dataservice" expression="//s:clientname/text()" evaluator="xml"/>
               <arg xmlns:s="http://ws.wso2.org/dataservice" expression="//s:clientshortname/text()" evaluator="xml"/>
            </args>
         </payloadFactory>
         <log level="full"/>
         <send/>
      </else>
   </filter>
</sequence>

卷曲:

 curl -v -H "Accept:application/json" -H "Content-Type:application/json"  -d '{"clientcode":"youtility"}' http://youtility-desktop:8282/services/PartyClientid3.0

我在客户端得到了 xml 格式的输出:&lt;ResponseJSON&gt;&lt;Body&gt;&lt;Datalist&gt;&lt;clientid&gt;21405735715865601&lt;/clientid&gt;&lt;clientname&gt;Youtility tech&lt;/clientname&gt;&lt;clientshortname&gt;Youtility&lt;/clientshortname&gt;&lt;/Datalist&gt;&lt;/Body&gt;&lt;Status&gt;200&lt;/Status&gt;&lt;/ResponseJSON&gt;

我要求 JSON 格式为:

{
  "ResponseJSON": {
    "Body": {
      "Datalist": {
        "clientid": "21405735715865601",
        "clientname": "Youtility tech",
        "clientshortname": "Youtility"
      }
    },
    "Status": "200"
  }
}

我应该在哪里更改我的代码?或者我必须更改我的payloadfactory?如果是,那么如何?

【问题讨论】:

    标签: curl wso2 wso2esb wso2carbon wso2dss


    【解决方案1】:

    您应该在发送中介之前设置“messageType”属性。

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

    【讨论】:

    • 感谢 mephist.. 我已经尝试过了..但是当我在发送调解器之前添加此属性时,客户端没有给出任何响应..
    • 您是否在axis2.conf 中为application/json 启用了MessageFormatter/Builder? $ESB_HOME/repository/conf/axis2/axis2.xml:&lt;messageFormatter contentType="application/json" class="org.apache.synapse.commons.json.JsonStreamFormatter"/&gt; &lt;messageBuilder contentType="application/json" class="org.apache.synapse.commons.json.JsonStreamBuilder"/&gt;
    【解决方案2】:

    由于您期望 JSON 格式,您需要正确更新 playLoadFactory。

    <payloadFactory media-type="json">
     <format>{ "clientid": "$1", "clientname": "$2", "clientshortname": "$3"}</format>
     <args>
     <arg expression="$.clientid" evaluator="json"></arg>
     <arg expression="$.clientname" evaluator="json"></arg>
     <arg expression="$.clientshortname" evaluator="json"></arg>
     </args>
     </payloadFactory>
    <property name="messageType" value="application/json" scope="axis2"/>
    

    试试这个

    http://technotes.dilan.me/?p=246

    【讨论】:

    • 感谢 Dakshika..我得到了输出,但它不是 Json 格式..它是这样的:'21405735715865601Youtility techYoutility tech200' 为什么会这样??
    • 它没有给出属性格式..因为我们已经预先确定了输出格式。
    • 我也试过了..它给出了相同的响应
    • 在您的输出序列中,您需要添加 after 负载工厂和之前 中介。不幸的是,即使使用带有 media-type="json" 的有效负载工厂(由于向后兼容的原因),我们也必须手动执行此操作。
    • 尝试在 之前添加 并跟踪
    【解决方案3】:

    从 curl 命令中删除 -H "Content-Type:application/json" 并尝试一次

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-11-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-10
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      相关资源
      最近更新 更多