如何制作故障消息并将其发送给jms提供商

时间:2013-12-16 15:00:50

标签: wso2 wso2esb

我在评估WSO2 esb并尝试这个简单的用例:

jms - > (esb) - > WebService(WSO2应用程序服务器上的HelloService) 发送响应jms队列的响应(结束点EPQ_ESB_OUT) 将故障发送到jms队列(终点EPQ_ESB_ERR)

当我停止WSO2 Application Server时,会调用故障序列并向EPQ_ESB_ERR发送一条消息,但该消息始终为空...

我尝试过使用makefault和buildfactory mediators,但两种情况都失败了(两种情况都是空信息)。

我的代理人:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="Test04Proxy02" transports="jms" startOnLoad="true" trace="enable">
    <target>
        <endpoint key="EPW_HelloService"/>
        <inSequence>
            <log>
                <property name="STEP" value="==== INseq"/>
            </log>      
        </inSequence>
        <outSequence>
            <property name="OUT_ONLY" value="true"/>
            <log>
                <property name="STEP" value="==== OUTseq"/>
            </log>       
            <send>
                <endpoint key="EPQ_ESB_OUT"/>
            </send>
        </outSequence>
        <faultSequence>
            <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
            <log level="full">
                <property name="STEP" value="==== FAULTseq"/>
                <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
                <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
                <property name="ERROR_DETAIL" expression="get-property('ERROR_DETAIL')"/>
            </log>       
            <payloadFactory>
                <format>
                    <ns:text xmlns:ns="http://myns">$1</ns:text>
                </format>
                <args>
                    <arg xmlns:ns="http://myns"
                                evaluator="xml"
                                expression="get-property('ERROR_MESSAGE')"/>
                </args>
            </payloadFactory>
            <send>
                <endpoint key="EPQ_ESB_ERR"/>
            </send>
        </faultSequence>
    </target>
</proxy>

任何帮助都会受到赞赏。感谢。

2 个答案:

答案 0 :(得分:0)

只是一个猜测:
也许你在使用namesspace有一些问题。 WSO似乎广泛使用ns命名空间,因此我会尝试在您的有效负载工厂中使用不同的命名空间,例如

       <payloadFactory>
            <format>
                <myns:text xmlns:myns="http://myns">$1</myns:text>
            </format>
            <args>
                <arg evaluator="xml" expression="get-property('ERROR_MESSAGE')"/>
            </args>
        </payloadFactory>

(您实际上不需要<arg>元素中的命名空间定义)

答案 1 :(得分:0)

问题解决了:

替换为

<makefault version="soap11">
    <code expression="get-property('ERROR_CODE')"/>
    <reason expression="get-property('ERROR_MESSAGE')"/>
</makefault>

并添加了

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

在结束标记之前。

现在不知道为什么它可以用这个参数...