在评估样本数据的过程中,我发现了以下问题。当 JMS 中的内容包含“颠倒的问号”<test>Inverted¿QuestionMark</test>时,代理会崩溃 - 实际上会挂起,CPU 会上升到 100%。这里的代理代码很容易重现:
只需添加<test>Inverted¿QuestionMark</test>到名为“test_qEncoding”的队列中,然后查看 CPU 启动情况和代理挂起情况。
<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse" name="test_encoding_crash_jms" transports="jms" startOnLoad="true" trace="disable">
    <parameter name="transport.jms.Destination">test_qEncoding</parameter>
    <parameter name="transport.jms.ConnectionFactory">myQueueConnectionFactory</parameter>
    <parameter name="transport.jms.DestinationType">queue</parameter>
    <parameter name="transport.jms.ContentType">
        <rules>
            <jmsProperty>contentType</jmsProperty>
            <default>application/xml;charset="iso-8859-15"</default>
        </rules>
    </parameter>
    <target>
        <inSequence>        
            <log level="custom">
                <property name="Context" value="Proxy test_encoding_crash_jms called"/>
            </log>
            <log level="full"/>
        </inSequence>
    </target>
</proxy>
当我使用 vfs 代理并读取为 ISO-8859 时,它可以工作。当我没有指定;charset="iso-8859-15"时,它也可以工作,但是内容对于我的输出来说不是正确的结尾。
当我想将它作为 ISO-8859 发送时,我应该如何从 JMS 获取消息?
为什么上述代理会挂起并阻塞整个 WSO2 ESB?