2017-06-15 11 views
0

以下のプロキシサービスがプロキシサービスによって呼び出されています。WSO2 ESBペイロードメッセージを保存

<?xml version="1.0" encoding="UTF-8"?> 
<sequence name="seq_invchk_slpa_in" trace="disable" xmlns="http://ws.apache.org/ns/synapse"> 
    <log level="custom"> 
    <property name="STATUS::" value="***************************"/> 
    </log> 
    <payloadFactory media-type="xml"> 
    <format> 
     <soapenv:Envelope xmlns:hnb="http://10.104.74.93/hnb" 
     xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
     <soapenv:Header/> 
     <soapenv:Body> 
      <hnb:CheckInvoiceDetails soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
      <invoice_no xsi:type="xsd:string">$1</invoice_no> 
      </hnb:CheckInvoiceDetails> 
     </soapenv:Body> 
     </soapenv:Envelope> 
    </format> 
    <args> 
     <arg evaluator="xml" expression="$ctx:invoice_no"/> 
    </args> 
    </payloadFactory> 
    <property name="ContentType" scope="axis2" type="STRING" value="text/xml"/> 
    <header name="Action" scope="default" value="CheckInvoiceDetails"/> 
    <property name="SOAPAction" scope="transport" type="STRING" value="CheckInvoiceDetails"/> 
    <send> 
    <endpoint key="gov:INVCHK/SLPA/endpoints/invchk_slpa_validation_ep.xml"/> 
    </send> 
</sequence> 

ツール(SOAP UI)から呼び出しても問題なく動作します。

しかし、システムから電話をかけるときに問題が発生します。私はこれまで をトレースしているが、正しい通話中にペイロード工場メッセージが

<?xml version="1.0" encoding="UTF-8"?> 
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hnb="http://10.104.74.93/hnb" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <soapenv:Body> 
     <hnb:CheckInvoiceDetails soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
     <invoice_no xmlns="http://ws.apache.org/ns/synapse" xsi:type="xsd:string">17231374967185</invoice_no> 
     </hnb:CheckInvoiceDetails> 
    </soapenv:Body> 
</soapenv:Envelope> 

誤った呼び出しが行われた場合、ペイロードメッセージが

<?xml version="1.0" encoding="UTF-8"?> 
<hnb:CheckInvoiceDetails xmlns:hnb="http://10.104.74.93/hnb" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
    <invoice_no xmlns="http://ws.apache.org/ns/synapse" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xsd:string">17231374967185</invoice_no> 
</hnb:CheckInvoiceDetails> 

としてESBの外に出るとして送信されています私は問題を引き起こすと思います。私は間違った通話中に、クライアントから取得応答が

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap .org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> 
    <SOAP-ENV:Body> 
     <SOAP-ENV:Fault> 
     <faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode> 
     <faultstring xsi:type="xsd:string">Operation '' is not defined in the WSDL for this service</faultstring> 
     <detail xsi:type="xsd:string" /> 
     </SOAP-ENV:Fault> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

どのように私はそれがあるとして、SOAPメッセージを保存し、システムによって呼び出されたときにそれを送ることができます。

はなぜすべてのヘルプは非常に高く評価されます <hnb:CheckInvoiceDetails xmlns:hnb="http://10.104.74.93/hnb" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">

メソッドレベルにまで混入石鹸名前空間です。

+0

プロパティにプロパティを保存します。その後、豊かなものを使用する必要があるときに復元します。 – simar

+0

コメントをお寄せいただきありがとうございますが、メッセージの変更を送信する際に問題がありますが、なぜソープ名スペースが追加されているのかについての手掛かりはありますか? – Yasothar

+0

PayloadFactoryメディエータはメッセージ本文の内容を変更する予定です。なぜあなたは封筒、ヘッダー、ボディータグを持っていますか? WSOESBは、トランスポートを通じてメッセージを送信する前にメッセージ自体にエンベロープを追加します。 – simar

答えて

1

あなたは、少なくともinvoice_noタグに

<payloadFactory media-type="xml"> 
    <format> 
      <hnb:CheckInvoiceDetails xmlns:hnb="http://10.104.74.93/hnb"> 
      <hnb:invoice_no xsi:type="xsd:string">$1</hnb:invoice_no> 
      </hnb:CheckInvoiceDetails> 
    </format> 
    <args> 
     <arg evaluator="xml" expression="$ctx:invoice_no"/> 
    </args> 
    </payloadFactory> 
に注意を払うのペイロード工場メディエーターの内容を変更する必要があります。もともと、それが想定していた名前空間が何であるかは明確ではなく、シナプスエンジンの名前空間を実際にネストしています。名前空間を明示的に割り当てる方が良い。

デフォルトでは、Synapse Engineはエンベロープを追加します。

メッセージタイプが不明な場合、soap12が返されます。がSynapseのドキュメントに見つかりました。 プロパティmessageTypeのないContent-Typeは役に立たない。

+0

デフォルトでは、シナプスエンジンはSOAP 1.2ヘッダーを追加しますが、1.1ヘッダーが必要な場合はどうすればそれらを明示的に追加できますか? – Yasothar

+0

私は今それをチェックする機会がありません。しかし、私はあなたがESBのサービスのSOAPUIでSOAPプロジェクトを作成すると、2つのサービスを取得することを覚えています。 1つはsoap1.1で別のsoap1.2で動作します – simar

+0

サービス名SampleProxyとすると、サービスに割り当てるすべての転送タイプの各エンドポイントを2つコピーします。 soapの場合 http:// ip-address:port/services/SampleProxy.SoapEnpoint1.1 http:// ip-address:port/services/SampleProxy.SoapEnpoint1.2 – simar