0

XML 文字列を返す Web サービスがあります。XML 文字列は、コールアウト メディエーターによってキャプチャされ、JMS キューに送信されます。しかし、キューの内容を見ると、'<' 記号が activemq キュー モニターで '<' として表示されています。

これを解決するためのアイデアは、「<」そのものとして示したいと思います。以下サンプルメッセージ。

<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ws="http://dummy.com.com/"><soapenv:Body>
      <ns2:validatePrescriptionResponse xmlns:ns2="http://dummy.com.com/"><return>&lt;Prescription xmlns="http://hl7.org/fhir">
  &lt;status value="active"/>
  &lt;patient>
    &lt;type value="Patient"/>
    &lt;url value="will smith"/>
  &lt;/patient>
  &lt;prescriber>
    &lt;type value="Provider"/>
    &lt;url value="Dr. stefan wright"/>
  &lt;/prescriber>
  &lt;prescribed value="2013+05:30"/>
  &lt;prescribed/>
  &lt;dispense>
    &lt;repeats value="10"/>
    &lt;quantity>
      &lt;value value="125"/>
      &lt;units value="ml"/>
    &lt;/quantity>
    &lt;dispenser>
      &lt;type value="Clinic"/>
      &lt;url value="Clinic"/>
    &lt;/dispenser&gt;
  &lt;/dispense>
  &lt;medicine>
    &lt;identification>
      &lt;text value="Penicillin VK oral suspension"/>
    &lt;/identification>
  &lt;/medicine>
  &lt;administrationRequest>
    &lt;description value="Penicillin VK oral suspension12510"/>
    &lt;totalPeriodicDose>
      &lt;numerator>
        &lt;value value="1250"/>
        &lt;units value="mg"/>
        &lt;code value="mg"/>
      &lt;/numerator>
      &lt;denominator>
        &lt;value value="1"/>
        &lt;units value="day"/>
        &lt;code value="d"/>
      &lt;/denominator>
    &lt;/totalPeriodicDose>
    &lt;duration>
      &lt;value value="10"/>
      &lt;units value="days"/>
      &lt;code value="d"/>
    &lt;/duration>
    &lt;dosageInstruction>
      &lt;doseQuantity>
        &lt;value value="125"/>
        &lt;units value="mg"/>
        &lt;code value="mg"/>
      &lt;/doseQuantity>
      &lt;schedule>
        &lt;repeat>
          &lt;frequency value="10"/>
          &lt;duration value="10"/>
        &lt;/repeat>
      &lt;/schedule>
    &lt;/dosageInstruction>
  &lt;/administrationRequest>
  &lt;reason>
    &lt;text value="Headache"/>
  &lt;/reason>
&lt;/Prescription></return></ns2:validatePrescriptionResponse>
   </soapenv:Body></soapenv:Envelope>

助けてください

-達人 @gnanagurus

4

4 に答える 4

2

contentType が正しく設定されていることを確認してください。それは「application/xml」である必要があります。

        <parameter name="transport.jms.ContentType">
            <rules>
                <jmsProperty>contentType</jmsProperty>
                <default>application/xml</default>
            </rules>
        </parameter>

サンプル構成については、以下を参照してください。

<definitions xmlns="http://ws.apache.org/ns/synapse">
    <proxy name="StockQuoteProxy" transports="jms">
        <target>
            <endpoint>
        <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
            </endpoint>
            <outSequence>
                <property action="set" name="OUT_ONLY" value="true"/>
        <send/>
            </outSequence>
        </target>
        <publishWSDL uri="http://localhost:9000/services/SimpleStockQuoteService?wsdl"/>
        <parameter name="transport.jms.ContentType">
            <rules>
                <jmsProperty>contentType</jmsProperty>
                <default>application/xml</default>
            </rules>
        </parameter>
    </proxy>
</definitions>

完全な Artical は [1] からアクセスできます。

[1]。http://wso2.org/library/articles/2011/11/wso2-esb-example-two-wayrequestresponse-semantic-jms

ありがとう、ダルシャナ。

于 2013-03-28T06:37:00.570 に答える
0

SOAPUI を介して外部サービスを呼び出してみて、応答が適切に返されるかどうかを確認しましたか。さらに、ログ レベル フルのコールアウト メディエーターの直後にログ メディエーターを追加し、構築されたメッセージが示されているように XML エスケープされているかどうかを確認します。これは、問題を特定するのに役立ちます。可能であれば、構成も貼り付けます。

于 2013-03-28T19:12:31.053 に答える
0

これは私の ESB プロキシ構成です: これは私のプロキシ構成です:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="ESBTESTProxy" transports="https,http,jms" statistics="enable" trace="enable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="ContentType" value="text/plain"/>
         <class name="com.guru.test.HEALTH_Mediator"/>
         <callout serviceURL="http://localhost:8080/PrescriptionValidation/validate" action="urn:validatePrescription">
            <source xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
            <target xmlns:s12="http://www.w3.org/2003/05/soap-envelope" xmlns:s11="http://schemas.xmlsoap.org/soap/envelope/" xpath="s11:Body/child::*[fn:position()=1] | s12:Body/child::*[fn:position()=1]"/>
         </callout>
         <property name="RESPONSE" value="true"/>
         <header name="To" action="remove"/>
         <send>
            <endpoint>
               <address uri="jms:/OutputQueue?transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory&java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&java.naming.provider.url=tcp://localhost:61616"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <drop/>
      </outSequence>
   </target>
   <publishWSDL uri="http://localhost:8080/PrescriptionValidation/validate?wsdl"/>
   <parameter name="transport.jms.ContentType">
      <rules>         
         <jmsProperty>contentType</jmsProperty>         
         <default>application/xml</default>      
      </rules>
   </parameter>
   <description></description>
</proxy>

あなたの考えを聞かせてください。

-達人 @gnanagurus

于 2013-03-29T11:01:34.183 に答える
0

ESB から送信された前述の不正な形式の XML メッセージが JMS キューで見つかった場合、それは起こらなかったと思います。不正な xml メッセージは処理できないためです。問題はキュー ブラウザにあると思いますか? xml タグ < を に変換し"&lt; "ます。

于 2013-03-28T17:10:37.463 に答える