我有一个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><Prescription xmlns="http://hl7.org/fhir">
<status value="active"/>
<patient>
<type value="Patient"/>
<url value="will smith"/>
</patient>
<prescriber>
<type value="Provider"/>
<url value="Dr. stefan wright"/>
</prescriber>
<prescribed value="2013+05:30"/>
<prescribed/>
<dispense>
<repeats value="10"/>
<quantity>
<value value="125"/>
<units value="ml"/>
</quantity>
<dispenser>
<type value="Clinic"/>
<url value="Clinic"/>
</dispenser>
</dispense>
<medicine>
<identification>
<text value="Penicillin VK oral suspension"/>
</identification>
</medicine>
<administrationRequest>
<description value="Penicillin VK oral suspension12510"/>
<totalPeriodicDose>
<numerator>
<value value="1250"/>
<units value="mg"/>
<code value="mg"/>
</numerator>
<denominator>
<value value="1"/>
<units value="day"/>
<code value="d"/>
</denominator>
</totalPeriodicDose>
<duration>
<value value="10"/>
<units value="days"/>
<code value="d"/>
</duration>
<dosageInstruction>
<doseQuantity>
<value value="125"/>
<units value="mg"/>
<code value="mg"/>
</doseQuantity>
<schedule>
<repeat>
<frequency value="10"/>
<duration value="10"/>
</repeat>
</schedule>
</dosageInstruction>
</administrationRequest>
<reason>
<text value="Headache"/>
</reason>
</Prescription></return></ns2:validatePrescriptionResponse>
</soapenv:Body></soapenv:Envelope>
请帮忙
-Guru @gnanagurus
答案 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;到"< "
。
答案 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