我想知道是否有人可以帮我完成以下设置。
我想通过JMS向我的应用程序发送消息到WSO2 ESB,以便ESB可以通过电子邮件发送它。我使用ActiveMQ作为队列。到目前为止,当我通过ActiveMQ接口向队列发送消息时,wso2 esb获取它。然后,wso2 esb将邮件作为电子邮件发送到特定的电子邮件地址。
所以我可以配置ActiveMQ和WSO2 esb将JMS消息发送到特定的电子邮件地址(例如,specificaddress@test.com)。
这是我的问题。如何修改电子邮件的收件人地址?在ESB序列配置中,我目前使用特定地址。但地址取决于使用我的应用程序的用户。所以我必须改变" To"属性,取决于必须接收电子邮件的用户。
那么如何通过JMS消息将属性" To"以及#34; Subject"的值传递给WSO2 esb序列?
这是我所拥有的序列的配置:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="sendMail">
<property name="messageType" value="text/html" scope="axis2" type="STRING"></property>
<property name="ContentType" value="text/html" scope="axis2"></property>
<property name="Subject" value="This is the subject." scope="transport"></property>
<property name="To" value="specificaddress@test.com" scope="transport"></property>
<property name="OUT_ONLY" value="true" scope="default" type="STRING"></property>
<log level="full"></log>
<send>
<endpoint>
<address uri="mailto:"></address>
</endpoint>
</send>
</sequence>
这是我的代理人:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="sendToMailIn"
transports="jms"
statistics="disable"
trace="disable"
startOnLoad="true">
<target inSequence="sendMail"/>
<description/>
</proxy>
我希望有人知道。
更新
我想我有解决方案!哇:-)也许,起初,我是傻瓜,但这里是...
您可以做的是通过JMS消息将SOAP信封发送到WSO2 ESB。然后,使用XPath表达式,您可以获取传递的值。在代理和序列上需要改变一点。
这是新序列:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="sendMail">
<property name="messageType" value="text/html" scope="axis2" type="STRING"></property>
<property name="ContentType" value="text/html" scope="axis2"></property>
<property xmlns:ns="http://org.apache.synapse/xsd" name="Subject" expression="$body/subject" scope="transport"></property>
<property xmlns:ns="http://org.apache.synapse/xsd" name="To" expression="$body/to" scope="transport"></property>
<property name="OUT_ONLY" value="true" scope="default" type="STRING"></property>
<log level="full"></log>
<send>
<endpoint>
<address uri="mailto:"></address>
</endpoint>
</send>
</sequence>
这是新代理:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="sendToMailIn"
transports="jms"
statistics="disable"
trace="disable"
startOnLoad="true">
<target inSequence="sendMail"/>
<parameter name="transport.jms.ContentType">
<rules>
<jmsProperty>contentType</jmsProperty>
<default>text/xml</default>
</rules>
</parameter>
<description/>
</proxy>
这是我的SOAP Envelop,WSO2 ESB从我的ActiMQ队列收到JMS消息:
<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org /soap/envelope/">
<soapenv:Body>
<subject>Email subject comes here.</subject>
<to>address@test.com</to>
</soapenv:Body>
</soapenv:Envelope>
答案 0 :(得分:0)
你有几个选择。
答案 1 :(得分:0)
我在JMS消息中使用JSON解决了这个问题。这是我的设置对我有用。
这是我的JSON消息:
{"to":"mail@test.com","subject":"TestSubject","mailbody":"Some body text ..."}
这是我的代理人:
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="sendToMailIn"
transports="jms"
statistics="disable"
trace="disable"
startOnLoad="true">
<target inSequence="sendMail"/>
<parameter name="transport.jms.ContentType">
<rules>
<jmsProperty>contentType</jmsProperty>
<default>application/json</default>
</rules>
</parameter>
<parameter name="transport.mail.ContentType">application/xml</parameter>
<description/>
</proxy>
这是我的序列:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="sendMail">
<property name="messageType" value="text/plain" scope="axis2" type="STRING"></property>
<property name="ContentType" value="text/plain" scope="axis2"></property>
<property xmlns:ns="http://org.apache.synapse/xsd" name="Subject" expression="json-eval($.subject)" scope="transport"></property>
<property xmlns:ns="http://org.apache.synapse/xsd" name="To" expression="json-eval($.to)" scope="transport"></property>
<property name="OUT_ONLY" value="true" scope="default" type="STRING"></property>
<script language="js">
<![CDATA[var mailbody = mc.getPayloadJSON().mailbody.toString(); mc.setPayloadXML(
<ns:text xmlns:ns="http://ws.apache.org/commons/ns/payload">{mailbody}</ns:text>);]]>
</script>
<log level="full"></log>
<send>
<endpoint>
<address uri="mailto:"></address>
</endpoint>
</send>
</sequence>