<显示代替'<' - WSO2代理服务

时间:2013-03-28 05:44:51

标签: xml web-services soap wso2 wso2esb

我有一个web服务,它返回XML字符串,而该字符串又被callout mediator捕获并被发送到JMS队列。但当我看到队列中的内容时,'<'在activemq队列监视器中,符号显示为“& lt”。

要解决此问题,我想将其显示为'<'本身。以下示例消息。

<?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>

请帮忙

-Guru  @gnanagurus

4 个答案:

答案 0 :(得分: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

谢谢你, Dharshana。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您是否尝试过通过SOAPUI调用外部服务,看看它是否正确返回响应。进一步在callout mediator之后添加日志中介,日志级别为full,并查看构造的消息是否在显示时进行了XML转义。这有助于隔离问题。如果可能,也粘贴您的配置。

答案 3 :(得分: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>

让我知道你的想法。

-Guru  @gnanagurus