2016-09-18 16 views
0

は、私はいくつかのFAULT配列において(報告自動JIRA問題を作成してみてください。 私はテキストのためだけで正常に動作するものJIRA APIのJSONペイロードを作る。 私はそれによって私ができるしかしJIRASOAPリクエストとレスポンスに報告したいと思いますこの問題について調査する。XMLを含むテキストを含むJSONペイロードを作成するにはどうすればよいですか?

私の質問は、私はそれでXMLを含むテキストでJSONペイロードを作成する方法です?

私はWSO2 ESB

でこの例外を取得説明:私は

<payloadFactory description="" media-type="json"> 
     <format> 
       { 
       "fields": { 
       "project": 
       { 
       "key": "$1" 
       }, 
       "summary": "$2", 
       "description": "$3", 
       "issuetype": { "name": "$4" } 
           } 
       } 
      </format> 
     <args> 
     <arg evaluator="xml" expression="$func:projectKey"/> 
     <arg evaluator="xml" expression="$func:summary"/> 
     <arg evaluator="xml" expression="$func:description"/> 
     <arg evaluator="xml" expression="$func:issueType"/> 
     </args> 
    </payloadFactory> 

を生成したいと私はパラメータ$ FUNCにXMLを含むいくつかのテキストを送りたい0

[2016-09-18 21:46:31,774] ERROR - NativeWorkerPool Uncaught exception 
java.lang.Error: Error: could not match input 
    at org.apache.synapse.commons.staxon.core.json.stream.impl.JsonScanner.zzScanError(JsonScanner.java:530) 
    at org.apache.synapse.commons.staxon.core.json.stream.impl.JsonScanner.yylex(JsonScanner.java:941) 

ペイロード。私は貧しい$ funcをXMLに送信された場合: - メッセージ

for the completeness to get the XML message I used 

<property expression="$body" name="request" 
     scope="default" type="STRING"/> 

通話終了の説明、この場合には必要とされていないものをJSONにに転送ペイロード工場を、XMLはテキストことになっています

<property expression="$body" name="response" 
    scope="default" type="STRING"/> 

を-POINTと私は$ funcをにバインド「要求」+「レスポンス」を知っておく必要があります。説明

+0

することができますしてくださいESBの内部に作成するサンプルのペイロードを追加します。 – krishan

+0

私はペイロードの例を追加しました。あなたは –

答えて

0

XMLは、あなたは、単にアプリケーション/ JSONにはmessageTypeプロパティを設定して行うことができます整形式である場合自動的に変換されます。詳細はthisを参照してください。

そうでなければ、payload Factoryメディエーターまたはエンリッチメディエーターを使用して、Jsonをカスタムビルドすることができます。

+0

はい、XMLは形式が整えられています。しかし、要点は、それをテキストとして保つ必要があることです。言い換えれば、ESBはそれをXML構造体ではないテキストとして認識します。 –

+0

XMLをCDATAに挿入できます。これはオプションですか? –

0
  1. 好きなXML構造でペイロードを作成します。

  2. JSスクリプトメディエータを使用して、1ノードをCDATAとして変更します。

  3. コンテンツタイプを変更します。

私のプロキシ設定、あなたはあなたの条件のために必要な変更を行ってください。

<?xml version="1.0" encoding="UTF-8"?> 
<proxy xmlns="http://ws.apache.org/ns/synapse" 
     name="XMLinsideJSON" 
     transports="http https" 
     startOnLoad="true"> 
    <target> 
     <inSequence>  
     <property name="BOK" expression="//*[1]" type="OM" scope="default"/> 
      <enrich> 
       <source type="inline" clone="true"> 
        <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
         <soapenv:Header/> 
         <soapenv:Body> 
          <fields xmlns=""> 
           <summary xmlns=""/> 
           <project xmlns=""/> 
           <description xmlns=""/>              
           <issuetype xmlns=""> 
            <name xmlns=""/>      
           </issuetype>         
          </fields> 
         </soapenv:Body> 
        </soapenv:Envelope> 
       </source> 
       <target type="envelope"/> 
      </enrich> 
      <script language="js"> 
       importPackage(Packages.org.apache.axiom.om); 
       var elem= mc.getEnvelope().getBody().getFirstElement().getFirstElement(); 
       var myText = elem.getOMFactory().createOMText(elem, mc.getProperty("BOK"), OMNode.CDATA_SECTION_NODE); 
       elem.addChild(myText)      
      </script>     
      <property name="messageType" scope="axis2" value="application/json"/>     
      <respond/> 
     </inSequence> 
     <outSequence> 
     <send/> 
     </outSequence> 
    </target> 
</proxy> 

マイリクエスト:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <payload> 
     <response> 
      <data>AAA</data> 
     </response> 
     </payload> 
    </soapenv:Body> 
</soapenv:Envelope> 

私の応答:

{"fields":{"summary":"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Body>\n  <payload>\n   <response>\n   <data>AAA</data>\n   </response>\n  </payload>\n </soapenv:Body></soapenv:Envelope>","project":null,"description":null,"issuetype":{"name":null}}} 
+0

あなたを思いついた。私はそれを試してみるよ! –

+0

あなたの結果を教えてください。 –

+0

ニュース、あなたは質問を閉じることができますか? –

関連する問題