2016-06-13 4 views
2

WSO2 ESB 4.9.0でAPIリソースを作成して、JavaScriptコンテンツをペイロードに戻したいとします。このリソースはContent-type:text/javascriptで応答を返す必要があります。WSO2でpayloadFactoryを使用したjavascriptペイロードの生成ESB 4.9.0

この目的のために、私は単純なコメント行を設定するpayloadFactoryメディエーターを使用します。 media-type text-plainまたはtext-javascriptを持つpayloadFactoryは存在しないため、私はmedia-type = "json"を使用します。

そして、私はよく反応します。しかし、 "text/javascript"のようにmessageTypeを設定すると、レスポンスに202のhttpコードが得られ、ペイロードは空です。

axis2.xmlにorg.apache.axis2.format.PlainTextFormatterとorg.apache.axis2.format.PlainTextBuilderを設定しているため、PlainTextFormatterを呼び出すときにログにnullPointerExceptionが記録されることがあります。ログ内のエラーがhereを与えているとして、

<resource methods="GET" uri-template="/js"> 
    <inSequence> 
     <log> 
      <property name="*** IN" value="[API] /test/v1/jsEcho/js"/> 
     </log> 
     <payloadFactory media-type="json"> 
      <format>//tealium universal tag - utag.sync ut4.0.201604181647, Copyright 2016 Tealium.com Inc. All Rights Reserved.</format> 
      <args></args> 
     </payloadFactory> 
     <property name="messageType" value="application/json" scope="axis2" type="STRING"/> 
     <loopback/> 
    </inSequence> 
    <outSequence> 
     <log> 
      <property name="*** OUT" value="[API] /test/v1/jsEcho/js"/> 
     </log> 
     <property name="messageType" value="text/javascript" scope="axis2" type="STRING"/> 
     <send/> 
    </outSequence> 
    <faultSequence></faultSequence> 
</resource> 

そして:

私のリソースは下記の通りです。

どうすればよいですか?

答えて

2

これは興味深い質問だったので、私はこれを試しました。良いニュースは、私はそれを完了することができたということです。

以下は私のAPI設定です。

<api xmlns="http://ws.apache.org/ns/synapse" name="Stack" context="/stack"> 
    <resource methods="GET" url-mapping="/js"> 
     <inSequence> 
     <payloadFactory media-type="xml"> 
      <format> 
       <ms11:text xmlns:ms11="http://ws.apache.org/commons/ns/payload"><![CDATA[//tealium universal tag - utag.sync ut4.0.201604181647, Copyright 2016 Tealium.com Inc. All Rights Reserved.]]></ms11:text> 
      </format> 
      <args/> 
     </payloadFactory> 
     <property name="messageType" value="text/javascript" scope="axis2"/> 
     <respond/> 
     <drop/> 
     </inSequence> 
    </resource> 
</api> 

私が行ったことのいくつかを説明しましょう。

  1. inSequence内に応答メディエーターとドロップメディエーターを使用して、ペイロードファクトリメディエータ経由で生成されたペイロードをクライアントに返してからメッセージをドロップしました。これで、メッセージはそのポイントを超えず、次に​​outSequenceは必要ありません。
  2. これはms11:textタグでどのように動作するか説明できません。私はTransform response to plain-text using wso2 esb 4.0.6からそれを見つけました。
  3. 私はあなたのjavascriptを囲むためにCDATAを使用しました。それはCDATAタグなしでも機能します。 javascriptにxml非友好的な文字がある場合は、それを使用することができます。
  4. テキスト/ javascriptコンテンツタイプのプレーンテキストフォーマッタを追加しました。

私はカール要求に応答します。

curl -v -X GET http://localhost:8280/stack/js 

< HTTP/1.1 200 OK 
< Host: localhost:8280 
< Content-Type: text/javascript; charset=UTF-8 
< Accept: */* 
< Date: Mon, 13 Jun 2016 16:52:36 GMT 
< Transfer-Encoding: chunked 
< 
* Connection #0 to host localhost left intact 
//tealium universal tag - utag.sync ut4.0.201604181647, Copyright 2016 Tealium.com Inc. All Rights Reserved. 
関連する問題