0

JSON ペイロードを使用して ESB (4.6.0) プロキシ サービスに POST しています。これは、ぎざぎざの JS アプリにルーティングするパススルー プロキシ サービスです。jaggery アプリはペイロードから JSON にアクセスしようとしていますが、JSON 文字列がエスケープされているためアクセスできません。

リクエスト ヘッダーは次のとおりです (web --> ESB から):

POST /services/testJaggPS HTTP/1.1
Host: pb-dvwa8:7280
Content-Length: 29
Cache-Control: no-cache
Origin: chrome-extension://fdmmgilgnpjigdojojpjoooidkmcomcm
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.110 Safari/537.36
Content-Type: application/json
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

{
  "PARAM": "hello world" 
}

jaggery アプリからの JSON 応答は次のとおりです。

{"RESPONSE" : {"test" : "hi", "PARAM" : null, "content" : "{\n \"PARAM\" : \"HELLO WORLD\" \n}"}}

「コンテンツ」(Web からの JSON ペイロードを格納する変数) がエスケープされていることに注意してください。

メッセージビルダー/フォーマッターを調べましたが、この問題は解決していません。これが私の現在のプロキシ サービスです (おそらくすべてのメッセージ ビルダーは必要ありません)。

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="testJaggPS"
       transports="https http"
       startOnLoad="true"
       trace="disable">
   <target endpoint="jaggRouter">
      <inSequence>
         <builder>
            <messageBuilder contentType="application/xml"
                            class="org.apache.axis2.builder.ApplicationXMLBuilder"
                            formatterClass="org.apache.axis2.transport.http.ApplicationXMLFormatter"/>
            <messageBuilder contentType="application/xop+xml"
                            class="org.apache.axis2.builder.MTOMBuilder"/>
            <messageBuilder contentType="multipart/related"
                            class="org.apache.axis2.builder.MIMEBuilder"/>
            <messageBuilder contentType="application/json"
                            class="org.apache.axis2.json.JSONBuilder"
                            formatterClass="org.apache.axis2.json.JSONMessageFormatter"/>
            <messageBuilder contentType="application/x-www-form-urlencoded"
                            class="org.apache.axis2.builder.XFormURLEncodedBuilder"
                            formatterClass="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/>
            <messageBuilder contentType="text/xml"
                            class="org.apache.axis2.builder.SOAPBuilder"
                            formatterClass="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
            <messageBuilder contentType="application/soap+xml"
                            class="org.apache.axis2.builder.SOAPBuilder"
                            formatterClass="org.apache.axis2.transport.http.SOAPMessageFormatter"/>
            <messageBuilder contentType="application/json/badgerfish"
                            class="org.apache.axis2.json.JSONBadgerfishOMBuilder"/>
         </builder>
         <property name="messageType" value="application/json" scope="axis2"/>
         <property name="contentType" value="application/json" scope="axis2"/>
      </inSequence>
      <outSequence>
         <property name="messageType" value="application/json" scope="axis2"/>
         <property name="contentType" value="application/json" scope="axis2"/>
         <send/>
      </outSequence>
   </target>
</proxy>

そして、ここに私のぎざぎざのコードがあります:

<%
// load core files
response.contentType = 'application/json';

var url = request.getRequestURL();
var theContent = request.getContent();  
 // note null 'PARAM' and escaped 'content'    
response.content = {"RESPONSE" : {
  "test" : "hi",
    "PARAM" : theContent.PARAM,
    "content" : theContent
}};

%>
4

1 に答える 1

0

文字エンコーディングなどの Content-Type ヘッダーに追加のものがある場合、Jaggery の自動 JSON 解析に問題がありました。master ブランチで修正されました。

ただし、以前のバージョンを試している場合は、JSON.parse()を使用してコンテンツを手動で解析する必要があります。つまり、あなたの

var theContent = request.getContent();

Jaggeryファイルの行、

var theContent = JSON.parse(request.getContent());
于 2013-07-11T09:34:33.673 に答える