0

我想从 ActiveMQ 5.8.0 队列接收到 WSO2 ESB 4.6.0 中的代理的文本消息。这是我的代理定义:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="proxy1" transports="jms" statistics="enable" trace="enable" startOnLoad="true">
   <target>
      <inSequence>
         <property name="messageType" value="text/plain" scope="axis2"/>
         <log level="full"/>
         <drop/>
      </inSequence>
   </target>
   <parameter name="transport.jms.ContentType">
      <rules>                                           
         <default>text/plain</default>                              
      </rules>
   </parameter>
   <parameter name="transport.jms.ConnectionFactory">myQueueConnectionFactory</parameter>
   <parameter name="transport.jms.DestinationType">queue</parameter>
   <parameter name="transport.jms.Destination">txqueue</parameter>
   <description></description>
</proxy>

比我使用以下 Java 代码向队列发送短信:

QueueImpl queue = new QueueImpl("queue://txqueue");
Connection connection = createConnection();

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer p = session.createProducer(queue);
Message msg = session.createTextMessage("Hello World");
p.send(msg);

这首先因 ClassNotFound 异常而失败。在我复制之后,来自activemq的hawtbuf-1.9.jar就消失了。(这是正确的方法吗?)

比我收到这个错误:

[2013-05-22 01:10:34,967] ERROR - JMSMessageReceiver Unknown error processing message
java.lang.RuntimeException: Can not serialize OM Element Envelope
    at org.apache.axiom.om.impl.llom.OMElementImpl.toString(OMElementImpl.java:994)
    at java.lang.String.valueOf(String.java:2854)
    at java.lang.StringBuffer.append(StringBuffer.java:232)
    at org.apache.synapse.mediators.builtin.LogMediator.getFullLogMessage(LogMediator.java:184)
    at org.apache.synapse.mediators.builtin.LogMediator.getLogMessage(LogMediator.java:123)
    at org.apache.synapse.mediators.builtin.LogMediator.mediate(LogMediator.java:91)
    at org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:71)
    at org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114)
    at org.apache.synapse.core.axis2.ProxyServiceMessageReceiver.receive(ProxyServiceMessageReceiver.java:154)
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180)
    at org.apache.axis2.transport.base.AbstractTransportListener.handleIncomingMessage(AbstractTransportListener.java:328)
    at org.apache.axis2.transport.jms.JMSMessageReceiver.processThoughEngine(JMSMessageReceiver.java:200)
    at org.apache.axis2.transport.jms.JMSMessageReceiver.onMessage(JMSMessageReceiver.java:122)
    at org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.handleMessage(ServiceTaskManager.java:538)
    at org.apache.axis2.transport.jms.ServiceTaskManager$MessageListenerTask.run(ServiceTaskManager.java:441)
    at org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: com.ctc.wstx.exc.WstxIOException: Invalid null character in text to output
    at com.ctc.wstx.sw.BaseStreamWriter.writeCharacters(BaseStreamWriter.java:462)
    at org.apache.axiom.util.stax.wrapper.XMLStreamWriterWrapper.writeCharacters(XMLStreamWriterWrapper.java:100)
    at org.apache.axiom.om.impl.MTOMXMLStreamWriter.writeCharacters(MTOMXMLStreamWriter.java:289)
    at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serializeText(StreamingOMSerializer.java:443)
    at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serializeNode(StreamingOMSerializer.java:173)
    at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serialize(StreamingOMSerializer.java:107)
    at org.apache.axiom.om.impl.serialize.StreamingOMSerializer.serialize(StreamingOMSerializer.java:76)
    at org.apache.axiom.om.ds.WrappedTextNodeOMDataSourceFromDataSource.serialize(WrappedTextNodeOMDataSourceFromDataSource.java:75)
    at org.apache.axiom.om.impl.llom.OMSourcedElementImpl.internalSerialize(OMSourcedElementImpl.java:688)
    at org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555)
    at org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
    at org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:230)
    at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:125)
    at org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:113)
    at org.apache.axiom.om.impl.llom.OMElementImpl.toString(OMElementImpl.java:988)
    ... 18 more
Caused by: java.io.IOException: Invalid null character in text to output
    at com.ctc.wstx.api.InvalidCharHandler$FailingHandler.convertInvalidChar(InvalidCharHandler.java:51)
    at com.ctc.wstx.sw.XmlWriter.handleInvalidChar(XmlWriter.java:623)
    at com.ctc.wstx.sw.BufferingXmlWriter.writeCharacters(BufferingXmlWriter.java:554)
    at com.ctc.wstx.sw.BaseStreamWriter.writeCharacters(BaseStreamWriter.java:460)
    ... 32 more

需要这方面的帮助,谢谢

编辑:

我在 Ubuntu 和 Windows 上都试过了,但都失败了。

我不知道它是否有区别,但我的 activemq 连接字符串是:

amqp:///test/?brokerlist='tcp://localhost:5672'
4

1 回答 1

0

当您从队列中选择消息时,您还没有定义服务级别参数来指示内容类型。像这样定义您的代理并检查;

proxy xmlns="http://ws.apache.org/ns/synapse" name="proxy1" transports="jms" statistics="enable" trace="enable" startOnLoad="true">
   <target>
      <inSequence>      
         <log level="full"/>
         <drop/>
      </inSequence>
   </target>
    <parameter name="transport.jms.ContentType">
            <rules>
                <jmsProperty>ContentType</jmsProperty>
                <default>text/plain</default>
            </rules>
        </parameter>
   <parameter name="transport.jms.ConnectionFactory">myQueueConnectionFactory</parameter>
   <parameter name="transport.jms.DestinationType">queue</parameter>
   <parameter name="transport.jms.Destination">txqueue</parameter>
   <description></description>
</proxy>
于 2013-05-22T10:14:05.037 回答