Hi Devs,

I have encountered an issue while processing rabbitMQ messages that contain
non-string headers.
The error that I found is has follow:

TID: [-1] [] [2018-03-22 13:24:26,970] ERROR
{org.apache.axis2.transport.rabbitmq.ServiceTaskManager} -  Error,
Connection closed, Exception occurred, service XXXTest.XXXdl.1.0.0, Listner
id - 388 {org.apache.axis2.transport.rabbitmq.ServiceTaskManager}

java.lang.ClassCastException: java.util.ArrayList cannot be cast to
com.rabbitmq.client.LongString

at
org.apache.axis2.transport.rabbitmq.utils.RabbitMQUtils.getTransportHeaders(RabbitMQUtils.java:126)

at
org.apache.axis2.transport.rabbitmq.RabbitMQMessageReceiver.processThroughAxisEngine(RabbitMQMessageReceiver.java:114)

at
org.apache.axis2.transport.rabbitmq.RabbitMQMessageReceiver.onMessage(RabbitMQMessageReceiver.java:61)

at
org.apache.axis2.transport.rabbitmq.ServiceTaskManager$MessageListenerTask.startConsumer(ServiceTaskManager.java:608)

at
org.apache.axis2.transport.rabbitmq.ServiceTaskManager$MessageListenerTask.run(ServiceTaskManager.java:336)

at
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:172)

at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

at java.lang.Thread.run(Thread.java:748)

This error is thrown when message contains non-string headers.
On my test, the headers are created by rabbitmq internally. This is a
rabbitmq MQ Dead-Letter handling process that creates it like that. So, I
cannot change the header to another type of information.
I am using WSO2 EI version 6.1.1 update 64.

I believe the issue is on the handling of the method getTransportHeaders:
// any other transport properties / headers
        Map<String, Object> headers = message.getHeaders();
        if (headers != null && !headers.isEmpty()) {
            for (String headerName : headers.keySet()) {
                String value = new String(((*LongString*
)(headers.get(headerName))).getBytes());
                map.put(headerName, value);
            }
        }

The get assumes that all data will be String/LongString where in my example
it is an ArrayList. Sending an picture with the message content and
properties.

Is there any know solution for this? How can this be solved?

Many thanks in advance.
Norberto
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to