在评估样本数据的过程中,我发现了以下问题。当 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?