0

WSO2esb を介して Web サービスを呼び出そうとしました。私の Web サービスは、このような SOAP メッセージしか受け入れません。

<?xml version="1.0" encoding="UTF-8"?>
<ns1:Envelope xmlns:ns1="http://www.webserviceX.NET/ConversionRate/Input" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Documents and Settings\RoGulk\Desktop\SPM\Envelope.xsd">
    <ns1:Body>
        <ns2:ConversionRate xmlns:ns2="http://www.webserviceX.NET/">
         <ns2:FromCurrency>USD</ns2:FromCurrency>
          <ns2:ToCurrency>USD</ns2:ToCurrency>
        </ns2:ConversionRate>
    </ns1:Body>
</ns1:Envelope>

しかし、問題は、入力メッセージを esb に読み取るときです。esb は、このように測定に追加のラッパーを追加します。

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<ns1:Envelope xmlns:ns1="http://www.webserviceX.NET/ConversionRate/Input">
  <ns1:Body>
    <ns2:ConversionRate xmlns:ns2="http://www.webserviceX.NET/">
      <ns2:FromCurrency>INR</ns2:FromCurrency>
      <ns2:ToCurrency>NAD</ns2:ToCurrency>
    </ns2:ConversionRate>
  </ns1:Body>
</ns1:Envelope>
</soapenv:Body>
</soapenv:Envelope>

エンドポイントを呼び出す前に、'application/XML' メッセージ フォーマッタを使用して実行できると思います。 *皆さん、助けてください、ありがとう

編集済み

プロキシ サービス構成を追加すると役立つと思いました。

これでは、デフォルトのアウトシーケンスを使用していません。その代わりに、出力ディレクトリへのファイルの書き込みを担当する「currencyFileWriter」と呼ばれるシーケンスを使用しています。

これは私のプロキシ サービスです。

<proxy xmlns="http://ws.apache.org/ns/synapse" name="CurrencyProxy" transports="https,http,vfs" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="messageType" value="application/xml" scope="default" type="STRING"/>
         <property name="ContentType" value="application/xml" scope="default"/>
         <log level="custom">
            <property name="MessageType" expression="$axis2:ContentType"/>
         </log>
         <log level="full"/>
         <log level="custom">
            <property name="insequance" value="================================Forwerded to out File writer sequance====================="/>
         </log>
         <send receive="currencyFileWriter" buildmessage="true">
            <endpoint key="CurrencyConverter"/>
         </send>
         <log level="custom">
            <property name="After" value="============================AFTER SEND================"/>
         </log>
         <log level="full"/>
      </inSequence>
   </target>
   <parameter name="transport.PollInterval">5</parameter>
   <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
   <parameter name="transport.vfs.FileURI">file:///C:/test/Orginal1/</parameter>
   <parameter name="transport.vfs.MoveAfterProcess">file:///C:/test/Pass1/</parameter>
   <parameter name="transport.vfs.MoveAfterFailure">file:///C:/test/Failures1/</parameter>
   <parameter name="transport.vfs.FileNamePattern">currencytest.xml</parameter>
   <parameter name="transport.vfs.ContentType">application/xml</parameter>
   <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
   <description></description>
</proxy>

そして、これは私の CurrencyFilewriter シーケンスです

<sequence xmlns="http://ws.apache.org/ns/synapse" name="currencyFileWriter">
   <log level="custom">
      <property name="sequance" value="=====================RECIVED TO CURRENCYFILEWRITER=========================="/>
   </log>
   <log level="full"/>
   <property name="transport.vfs.ReplyFileName" value="result.xml" scope="default" type="STRING"/>
   <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
   <send>
      <endpoint>
         <address uri="vfs:file:///C:/test/Out1"/>
      </endpoint>
   </send>
</sequence>
4

2 に答える 2

1

次の構成を使用したところ、VFSフォルダー内で次の結果が得られました。

これが私がしたことです:

エンドポイント構成:

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="CurrencyConverter">
   <address uri="http://www.webservicex.net/CurrencyConvertor.asmx"></address>
</endpoint>

シーケンス構成:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="currencyFileWriter">
   <log level="custom">
      <property name="sequance" value="=====================RECIVED TO CURRENCYFILEWRITER=========================="/>
   </log>
   <log level="full"/>
   <property name="transport.vfs.ReplyFileName" value="result.xml" scope="default" type="STRING"/>
   <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
   <send>
      <endpoint>
         <address uri="vfs:file:///home/ravi/esb/wso2esb-4.5.1/vfs-temp/Out1"/>
      </endpoint>
   </send>
</sequence>

プロキシ設定:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="CurrencyProxy" transports="https,http,vfs" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="custom">
            <property name="insequance" value="================================Forwerded to out File writer sequance====================="/>
         </log>
         <send>
            <endpoint key="CurrencyConverter"/>
         </send>
         <log level="custom">
            <property name="After" value="============================AFTER SEND================"/>
         </log>
         <log level="full"/>
      </inSequence>
      <outSequence>
         <sequence key="currencyFileWriter"/>
      </outSequence>
   </target>
   <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
   <parameter name="transport.PollInterval">5</parameter>
   <parameter name="transport.vfs.MoveAfterProcess">file:///home/ravi/esb/wso2esb-4.5.1/vfs-temp/Pass1/</parameter>
   <parameter name="transport.vfs.FileURI">file:///home/ravi/esb/wso2esb-4.5.1/vfs-temp/Orginal1/</parameter>
   <parameter name="transport.vfs.MoveAfterFailure">file:///home/ravi/esb/wso2esb-4.5.1/vfs-temp/Failures1/</parameter>
   <parameter name="transport.vfs.FileNamePattern">currencytest.xml</parameter>
   <parameter name="transport.vfs.ContentType">application/xml</parameter>
   <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
   <description></description>
</proxy>

これは、クライアント(私の場合はSOAP UI)からESBに渡されるものです-ここでは、名前空間ns1をhttp://www.w3.org/2003/05/soap-envelopeにポイントして、SOAP1.2を使用しました。

<?xml version="1.0" encoding="UTF-8"?>
<ns1:Envelope xmlns:ns1="http://www.w3.org/2003/05/soap-envelope" xmlns:ns2="http://www.webserviceX.NET/ConversionRate/Input">

    <ns1:Body>
        <ns2:ConversionRate xmlns:ns2="http://www.webserviceX.NET/">
         <ns2:FromCurrency>USD</ns2:FromCurrency>
          <ns2:ToCurrency>LKR</ns2:ToCurrency>
        </ns2:ConversionRate>
    </ns1:Body>
</ns1:Envelope>

これは、ESBがバックエンドサービスに送信するものです。

POST /CurrencyConvertor.asmx?WSDL HTTP/1.1
Content-Type: application/soap+xml; charset=UTF-8; action="urn:mediate"
Accept-Encoding: gzip,deflate
Transfer-Encoding: chunked
Host: localhost:5000
Connection: Keep-Alive
User-Agent: Synapse-HttpComponents-NIO

<?xml version='1.0' encoding='UTF-8'?>
<ns1:Envelope xmlns:ns1="http://www.w3.org/2003/05/soap-envelope" xmlns:ns2="http://www.webserviceX.NET/ConversionRate/Input">
    <ns1:Body>
        <ns2:ConversionRate xmlns:ns2="http://www.webserviceX.NET/">
            <ns2:FromCurrency>USD</ns2:FromCurrency>
            <ns2:ToCurrency>LKR</ns2:ToCurrency>
        </ns2:ConversionRate>
    </ns1:Body>
</ns1:Envelope>

これは、WebサービスがESBに返すものであり、Out1ファイルにも保存されます。

Cache-Control: private, max-age=0
Content-Length: 380
Content-Type: application/soap+xml; charset=utf-8
Server: Microsoft-IIS/7.0
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
Date: Wed, 23 Jan 2013 15:53:53 GMT


<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <ConversionRateResponse xmlns="http://www.webserviceX.NET/">     
            <ConversionRateResult>127.05</ConversionRateResult>
        </ConversionRateResponse>
    </soap:Body>
</soap:Envelope>

このセットアップのように、これがお役に立てば幸いです。ESBがリクエストを再ラップすることで、発生している問題が発生していないようです。:)

于 2013-01-23T16:07:59.850 に答える