1

このプロキシ サービスを使用して、2 つの xml メッセージを 1 つに集約します。

  1. アグリゲーター クラスを xpath で構成しました
  2. 名前空間を使用した xpath が機能するかどうかはわかりません。ログで追跡できませんでした。

私のプロキシ構成:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="prescription"
       transports="https http jms"
       startOnLoad="true"
       trace="disable">
   <description/>
   <target>
      <inSequence>
         <aggregate>
            <completeCondition>
               <messageCount min="2" max="2"/>
            </completeCondition>
            <onComplete expression="//soapenv:Envelope//f:Prescription//f:identifier//f:id//@value">

               <send>
                  <endpoint>
                     <address uri="jms:/report?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616"/>
                  </endpoint>
               </send>

            </onComplete>
         </aggregate>

      </inSequence>
      <outSequence>
         <drop/>
      </outSequence>
      <faultSequence/>
   </target>
   <parameter name="transport.jms.ContentType">
      <rules>
         <jmsProperty>contentType</jmsProperty>
         <default>application/xml</default>
      </rules>
   </parameter>
</proxy>

入力メッセージは次のようになります: (患者 ID に基づいて集計したい)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://isova.wipro.com/">


<Prescription xmlns="http://hl7.org/fhir">
  <identifier>
    <id value="A0001"/>
  </identifier>
  <status value="active"/>
  <patient>
    <type value="Patient"/>
    <url value="Bhavani"/>
  </patient>
  <prescriber>
    <type value="Provider"/>
    <url value="Dr.Mathews"/>
  </prescriber>
  <medicine>
    <identification>
      <text value="Zintac"/>
    </identification>
  </medicine>
</Prescription></soapenv:Envelope>

助言がありますか ?

よろしく教祖 @gnanagurus


この問題を解決することはできませんでした。これは私の最新の WSO2 プロキシです。

これらは、'Prescription' キューに存在する 2 つのメッセージです。

メッセージ 1:

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://isova.wipro.com/">


<Prescription xmlns="http://hl7.org/fhir">
  <identifier>
    <id value="A0001"/>
  </identifier>
  <status value="active"/>
  <patient>
    <type value="Patient"/>
    <url value="Bhavani"/>
  </patient>
  <prescriber>
    <type value="Provider"/>
    <url value="Dr.Mathews"/>
  </prescriber>
  <medicine>
    <identification>
      <text value="Zintac"/>
    </identification>
  </medicine>
</Prescription></soapenv:Envelope></soapenv:Body></soapenv:Envelope>

メッセージ 2:

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://isova.wipro.com/">


<Prescription xmlns="http://hl7.org/fhir">
  <identifier>
    <id value="A0001"/>
  </identifier>
  <status value="active"/>
  <patient>
    <type value="Patient"/>
    <url value="Bhavani"/>
  </patient>
  <prescriber>
    <type value="Provider"/>
    <url value="Dr.John"/>
  </prescriber>
  <medicine>
    <identification>
      <text value="tintac"/>
    </identification>
  </medicine>
</Prescription></soapenv:Envelope></soapenv:Body></soapenv:Envelope>

プロキシー:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="prescription"
       transports="https http jms"
       startOnLoad="true"
       trace="disable">
   <description/>
   <target>
      <inSequence>


         <aggregate>  
                <completeCondition>  
                    <messageCount min="2"/>  
                </completeCondition>  
                <onComplete expression="/Prescription">  
                <send>
                  <endpoint>
                     <address uri="jms:/report?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;java.naming.provider.url=tcp://localhost:61616"/>
                  </endpoint>
               </send>
                </onComplete>  
            </aggregate>  
      </inSequence>
      <outSequence>
         <drop/>
      </outSequence>
      <faultSequence/>
   </target>
   <parameter name="transport.jms.ContentType">
      <rules>
         <jmsProperty>contentType</jmsProperty>
         <default>application/xml</default>
      </rules>
   </parameter>
</proxy>

これは私の集約を解決していません。これら 2 つのメッセージはアグリゲーターを取得していません。名前空間を持つ複数の xpath を試しました。どんな助けも大いに必要です。

集約メディエーターの代わりに使用できる WSO2 Aggregator カスタム Java クラスはありますか?

よろしくグル

4

3 に答える 3

3

はい、名前空間 f を定義する必要があります。最初に直接行うことができます:

<proxy xmlns="http://ws.apache.org/ns/synapse" xmlns:f="http://hl7.org/fhir"

もちろん、ログ出力を作成して xpath 式を確認することもできます (非常に便利です)。

<log level="custom">
   <property name="yourXPathTest" expression="$body/f:Prescription/f:identifier/f:id/@value"/>
</log>
于 2013-05-01T14:39:54.223 に答える
1

名前空間を定義していないため、XPATH が間違っています。

SOAP メッセージを扱っていると思います。もしそうなら、あなたは上記の正確なメッセージをコピーしました. SOAP 本体が表示されません。すべきことは、xml ペイロードを SOAP 本文に充実させ、集約メディエーターからそれらを集約することです。そこでは、SOAP 本体をルートとして XPATH を指定するだけで済みます。あなたの場合、それはあるべきです

<onComplete xmlns:f="http://hl7.org/fhir" expression="//f:Prescription/f:identifier/f:id/text()"> 
于 2013-05-01T10:19:16.667 に答える