1

WSO2 ESB を使用して Web サイトから XML ファイルをダウンロードしたいと考えています。簡単にするために、URL は静的であると想定します。

私は VFS をプロキシ サービスと個々のシーケンスの両方で試しましたが、成功しませんでした。インターネット上で関連する資料を見つけることができませんでした。

シーケンス XML は次のとおりです。

<sequence xmlns="http://ws.apache.org/ns/synapse" name="download">
   <in>
      <log level="headers">
         <property name="?" value="[download] in: started"/>
      </log>
      <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
      <property name="transport.vfs.ContentType" value="text/xml" scope="transport" type="STRING"/>
      <property name="transport.vfs.FileURI" value="http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2013.xml" scope="transport" type="STRING"/>
      <log level="headers">
         <property name="?" value="[download] in: sending over vfs"/>
      </log>
      <send>
         <endpoint>
            <address uri="http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2013.xml"/>
         </endpoint>
      </send>
      <log level="headers">
         <property name="?" value="[download] in: ended"/>
      </log>
   </in>
   <out>
      <log level="headers">
         <property name="?" value="[download] out: started"/>
      </log>
      <send/>
      <log level="headers">
         <property name="?" value="[download] out: ended"/>
      </log>
   </out>
</sequence>

では、 WSO2 ESB を使用して HTTP 経由で大きなファイルをダウンロードするにはどうすればよいでしょうか?

4

2 に答える 2

2

私は同様の問題を抱えており、現時点では API と次のコードで解決しています。

<api xmlns="http://ws.apache.org/ns/synapse" name="EcoRest" context="/services/ecorest">
   <resource methods="GET" uri-template="/{idFile}">
      <inSequence>
         <send>
            <endpoint>
               <http method="get" uri-template="http://slx00012001:8888/repositoryfiles/{uri.var.idFile}">
                  <suspendOnFailure>
                     <errorCodes>101500,101510,101001,101000</errorCodes>
                     <initialDuration>10</initialDuration>
                     <progressionFactor>1.0</progressionFactor>
                     <maximumDuration>10</maximumDuration>
                  </suspendOnFailure>
               </http>
            </endpoint>
         </send>
         <property name="enableSwA" value="true" scope="axis2"></property>
      </inSequence>
      <faultSequence>
         <log level="custom">
            <property name="FAULT GETTING FILE" expression="get-property('uri.var.idFile')"></property>
         </log>
         <payloadFactory media-type="json">
            <format>           {"descError":"$1", "error": "true"}           </format>
            <args>
               <arg evaluator="json" expression="$.descError"></arg>
            </args>
         </payloadFactory>
         <property name="HTTP_SC" value="500" scope="axis2" type="STRING"></property>
         <respond></respond>
      </faultSequence>
   </resource>
</api>

この API は完全に機能し、ファイルのスルーパスを作成します。しかし、id_file が存在しないと送信した場合、バックエンド サービスは json メッセージで http 400 を返し、プロセスは faultsequence に入りますが、faultsequence の PayloadFactory が機能せず、理由がわかりません。 (

于 2015-06-23T14:42:05.457 に答える
0

この構成を試してみてください:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="download" transports="https,http,vfs" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
         <property name="ClientApiNonBlocking" value="true" scope="axis2" action="remove"/>
         <send>
            <endpoint>
               <address uri="vfs:file://home/secondary/file.xml"/>
            </endpoint>
         </send>
      </inSequence>
   </target>
   <parameter name="transport.vfs.Streaming">true</parameter>
   <parameter name="transport.vfs.FileURI">http://static.nvd.nist.gov/feeds/xml/cve/nvdcve-2.0-2013.xml</parameter>
   <parameter name="transport.vfs.Locking">disable</parameter>
   <description></description>
</proxy>

以下を使用してダウンロードを開始できます。

curl -v http://localhost:8280/services/download

VFS トランスポート固有のパラメーターの詳細については、http: //docs.wso2.org/wiki/display/ESB460/VFS+Transportを参照してください。また、別の VFS の例をhttp://docs.wso2.org/wiki/pages/viewpage.action?pageId=16846489で見つけることもできます。お役に立てれば。

于 2013-04-29T17:16:44.097 に答える