0

我有一个 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 调用外部服务并查看它是否正确返回响应。在 log 级别 full 的 callout mediator 之后进一步添加一个 log mediator,并查看构造的消息是否是 XML 转义的,如图所示。这将有助于隔离问题。如果可能,也粘贴您的配置。

于 2013-03-28T19:12:31.053 回答
0

如果您在从 ESB 发送的 JMS 队列中发现了上述格式错误的 XML 消息,我认为它不会发生。因为无法处理格式错误的 xml 消息。我认为问题出在您的队列浏览器中?它将 xml 标签 < 转换为"&lt; ".

于 2013-03-28T17:10:37.463 回答
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 回答