You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@qpid.apache.org by "Martin Ritchie (JIRA)" <qp...@incubator.apache.org> on 2007/11/06 18:38:51 UTC

[jira] Created: (QPID-677) Message properties get erased when routing message

Message properties get erased when routing message
--------------------------------------------------

                 Key: QPID-677
                 URL: https://issues.apache.org/jira/browse/QPID-677
             Project: Qpid
          Issue Type: Bug
          Components: Java Broker
    Affects Versions: M2, M2.1
            Reporter: Martin Ritchie
             Fix For: M2.1


In adding support for JMSXUserID I noted that the underlying data for the message _headers is being erased.

I haven't had time to track this down but here is what I see.

I update the userID value in the header to be the authenticated user id. This causes the encoded Message Headers to be set to null. The data for which is copied in to a local byte[] so can be reencoded. However, the _headers FieldTable only maintains a reference to the original ByteBuffer. When routing the message the _headers may be inspected if a Selector is being used. Because the broker has not decoded the fieldtable values it now attempts to do so. For some reason the ByteBuffer data no longer exists and so a decoding is not possible. 

pool-2-thread-4 2007-11-06 17:30:20,983 DEBUG [qpid.server.filter.PropertyExpression] Looking up property:Selector
Dispatcher-Channel-1 2007-11-06 17:30:20,999 DEBUG [apache.qpid.client.BasicMessageConsumer] Message is of type: org.apache.qpid.client.message.JMSTextMessage
pool-2-thread-4 2007-11-06 17:30:20,999 ERROR [qpid.server.protocol.AMQPFastProtocolHandler] Exception caught inAMQProtocolSession(anonymous(26156009)), closing session explictly: java.nio.BufferUnderflowException
java.nio.BufferUnderflowException
	at java.nio.Buffer.nextGetIndex(Buffer.java:474)
	at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:205)
	at org.apache.mina.common.support.BaseByteBuffer.get(BaseByteBuffer.java:203)
	at org.apache.mina.common.ByteBuffer.getUnsigned(ByteBuffer.java:487)
	at org.apache.qpid.framing.AMQShortString.readFromBuffer(AMQShortString.java:172)
	at org.apache.qpid.framing.EncodingUtils.readAMQShortString(EncodingUtils.java:660)
	at org.apache.qpid.framing.FieldTable.setFromBuffer(FieldTable.java:962)
	at org.apache.qpid.framing.FieldTable.populateFromBuffer(FieldTable.java:111)
	at org.apache.qpid.framing.FieldTable.initMapIfNecessary(FieldTable.java:171)
	at org.apache.qpid.framing.FieldTable.keySet(FieldTable.java:890)
	at org.apache.qpid.server.filter.PropertyExpression.evaluate(PropertyExpression.java:279)
	at org.apache.qpid.server.filter.ComparisonExpression$1.evaluate(ComparisonExpression.java:245)
	at org.apache.qpid.server.filter.ComparisonExpression.matches(ComparisonExpression.java:590)
	at org.apache.qpid.server.filter.JMSSelectorFilter.matches(JMSSelectorFilter.java:52)
	at org.apache.qpid.server.filter.SimpleFilterManager.allAllow(SimpleFilterManager.java:57)
	at org.apache.qpid.server.queue.SubscriptionImpl.checkFilters(SubscriptionImpl.java:442)
	at org.apache.qpid.server.queue.SubscriptionImpl.hasInterest(SubscriptionImpl.java:423)
	at org.apache.qpid.server.queue.SubscriptionSet.nextSubscriberImpl(SubscriptionSet.java:154)
	at org.apache.qpid.server.queue.SubscriptionSet.nextSubscriber(SubscriptionSet.java:129)
	at org.apache.qpid.server.queue.ConcurrentSelectorDeliveryManager.deliver(ConcurrentSelectorDeliveryManager.java:818)
	at org.apache.qpid.server.queue.AMQQueue.process(AMQQueue.java:803)
	at org.apache.qpid.server.txn.NonTransactionalContext.deliver(NonTransactionalContext.java:99)
	at org.apache.qpid.server.queue.AMQMessage.deliver(AMQMessage.java:735)
	at org.apache.qpid.server.queue.AMQMessage.addContentBodyFrame(AMQMessage.java:377)
	at org.apache.qpid.server.AMQChannel.publishContentBody(AMQChannel.java:266)
	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.contentBodyReceived(AMQMinaProtocolSession.java:389)
	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.frameReceived(AMQMinaProtocolSession.java:220)
	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.dataBlockReceived(AMQMinaProtocolSession.java:191)
	at org.apache.qpid.server.protocol.AMQPFastProtocolHandler.messageReceived(AMQPFastProtocolHandler.java:206)
	at org.apache.mina.common.support.AbstractIoFilterChain$2.messageReceived(AbstractIoFilterChain.java:189)
	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
	at org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimpleProtocolDecoderOutput.java:60)
	at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:185)
	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
	at org.apache.qpid.pool.PoolingFilter.messageReceived(PoolingFilter.java:317)
	at org.apache.mina.filter.ReferenceCountingIoFilter.messageReceived(ReferenceCountingIoFilter.java:96)
	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
	at org.apache.qpid.pool.Event$ReceivedEvent.process(Event.java:86)
	at org.apache.qpid.pool.Job.processAll(Job.java:109)
	at org.apache.qpid.pool.Job.run(Job.java:147)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
	at java.lang.Thread.run(Thread.java:619)


I don't quite see what is going wrong. However, if the FieldTable is populated from the buffer before routing then the data can be re-encoded. Simplist way to do that is to request the getHeaders().keySet()



-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Updated: (QPID-677) Message properties get erased when routing message

Posted by "Martin Ritchie (JIRA)" <qp...@incubator.apache.org>.
     [ https://issues.apache.org/jira/browse/QPID-677?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Ritchie updated QPID-677:
--------------------------------

    Fix Version/s:     (was: M2.1)
                   M3

> Message properties get erased when routing message
> --------------------------------------------------
>
>                 Key: QPID-677
>                 URL: https://issues.apache.org/jira/browse/QPID-677
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Broker
>    Affects Versions: M2, M2.1
>            Reporter: Martin Ritchie
>             Fix For: M3
>
>
> In adding support for JMSXUserID I noted that the underlying data for the message _headers is being erased.
> I haven't had time to track this down but here is what I see.
> I update the userID value in the header to be the authenticated user id. This causes the encoded Message Headers to be set to null. The data for which is copied in to a local byte[] so can be reencoded. However, the _headers FieldTable only maintains a reference to the original ByteBuffer. When routing the message the _headers may be inspected if a Selector is being used. Because the broker has not decoded the fieldtable values it now attempts to do so. For some reason the ByteBuffer data no longer exists and so a decoding is not possible. 
> pool-2-thread-4 2007-11-06 17:30:20,983 DEBUG [qpid.server.filter.PropertyExpression] Looking up property:Selector
> Dispatcher-Channel-1 2007-11-06 17:30:20,999 DEBUG [apache.qpid.client.BasicMessageConsumer] Message is of type: org.apache.qpid.client.message.JMSTextMessage
> pool-2-thread-4 2007-11-06 17:30:20,999 ERROR [qpid.server.protocol.AMQPFastProtocolHandler] Exception caught inAMQProtocolSession(anonymous(26156009)), closing session explictly: java.nio.BufferUnderflowException
> java.nio.BufferUnderflowException
> 	at java.nio.Buffer.nextGetIndex(Buffer.java:474)
> 	at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:205)
> 	at org.apache.mina.common.support.BaseByteBuffer.get(BaseByteBuffer.java:203)
> 	at org.apache.mina.common.ByteBuffer.getUnsigned(ByteBuffer.java:487)
> 	at org.apache.qpid.framing.AMQShortString.readFromBuffer(AMQShortString.java:172)
> 	at org.apache.qpid.framing.EncodingUtils.readAMQShortString(EncodingUtils.java:660)
> 	at org.apache.qpid.framing.FieldTable.setFromBuffer(FieldTable.java:962)
> 	at org.apache.qpid.framing.FieldTable.populateFromBuffer(FieldTable.java:111)
> 	at org.apache.qpid.framing.FieldTable.initMapIfNecessary(FieldTable.java:171)
> 	at org.apache.qpid.framing.FieldTable.keySet(FieldTable.java:890)
> 	at org.apache.qpid.server.filter.PropertyExpression.evaluate(PropertyExpression.java:279)
> 	at org.apache.qpid.server.filter.ComparisonExpression$1.evaluate(ComparisonExpression.java:245)
> 	at org.apache.qpid.server.filter.ComparisonExpression.matches(ComparisonExpression.java:590)
> 	at org.apache.qpid.server.filter.JMSSelectorFilter.matches(JMSSelectorFilter.java:52)
> 	at org.apache.qpid.server.filter.SimpleFilterManager.allAllow(SimpleFilterManager.java:57)
> 	at org.apache.qpid.server.queue.SubscriptionImpl.checkFilters(SubscriptionImpl.java:442)
> 	at org.apache.qpid.server.queue.SubscriptionImpl.hasInterest(SubscriptionImpl.java:423)
> 	at org.apache.qpid.server.queue.SubscriptionSet.nextSubscriberImpl(SubscriptionSet.java:154)
> 	at org.apache.qpid.server.queue.SubscriptionSet.nextSubscriber(SubscriptionSet.java:129)
> 	at org.apache.qpid.server.queue.ConcurrentSelectorDeliveryManager.deliver(ConcurrentSelectorDeliveryManager.java:818)
> 	at org.apache.qpid.server.queue.AMQQueue.process(AMQQueue.java:803)
> 	at org.apache.qpid.server.txn.NonTransactionalContext.deliver(NonTransactionalContext.java:99)
> 	at org.apache.qpid.server.queue.AMQMessage.deliver(AMQMessage.java:735)
> 	at org.apache.qpid.server.queue.AMQMessage.addContentBodyFrame(AMQMessage.java:377)
> 	at org.apache.qpid.server.AMQChannel.publishContentBody(AMQChannel.java:266)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.contentBodyReceived(AMQMinaProtocolSession.java:389)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.frameReceived(AMQMinaProtocolSession.java:220)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.dataBlockReceived(AMQMinaProtocolSession.java:191)
> 	at org.apache.qpid.server.protocol.AMQPFastProtocolHandler.messageReceived(AMQPFastProtocolHandler.java:206)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$2.messageReceived(AbstractIoFilterChain.java:189)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimpleProtocolDecoderOutput.java:60)
> 	at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:185)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.qpid.pool.PoolingFilter.messageReceived(PoolingFilter.java:317)
> 	at org.apache.mina.filter.ReferenceCountingIoFilter.messageReceived(ReferenceCountingIoFilter.java:96)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.qpid.pool.Event$ReceivedEvent.process(Event.java:86)
> 	at org.apache.qpid.pool.Job.processAll(Job.java:109)
> 	at org.apache.qpid.pool.Job.run(Job.java:147)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> 	at java.lang.Thread.run(Thread.java:619)
> I don't quite see what is going wrong. However, if the FieldTable is populated from the buffer before routing then the data can be re-encoded. Simplist way to do that is to request the getHeaders().keySet()

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Resolved: (QPID-677) Message properties get erased when routing message

Posted by "Martin Ritchie (JIRA)" <qp...@incubator.apache.org>.
     [ https://issues.apache.org/jira/browse/QPID-677?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Martin Ritchie resolved QPID-677.
---------------------------------

    Resolution: Fixed

Change to the Message Handling of ByteBuffers for Fieldtables addressed this.

> Message properties get erased when routing message
> --------------------------------------------------
>
>                 Key: QPID-677
>                 URL: https://issues.apache.org/jira/browse/QPID-677
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Broker
>    Affects Versions: M2, M2.1
>            Reporter: Martin Ritchie
>             Fix For: M3
>
>
> In adding support for JMSXUserID I noted that the underlying data for the message _headers is being erased.
> I haven't had time to track this down but here is what I see.
> I update the userID value in the header to be the authenticated user id. This causes the encoded Message Headers to be set to null. The data for which is copied in to a local byte[] so can be reencoded. However, the _headers FieldTable only maintains a reference to the original ByteBuffer. When routing the message the _headers may be inspected if a Selector is being used. Because the broker has not decoded the fieldtable values it now attempts to do so. For some reason the ByteBuffer data no longer exists and so a decoding is not possible. 
> pool-2-thread-4 2007-11-06 17:30:20,983 DEBUG [qpid.server.filter.PropertyExpression] Looking up property:Selector
> Dispatcher-Channel-1 2007-11-06 17:30:20,999 DEBUG [apache.qpid.client.BasicMessageConsumer] Message is of type: org.apache.qpid.client.message.JMSTextMessage
> pool-2-thread-4 2007-11-06 17:30:20,999 ERROR [qpid.server.protocol.AMQPFastProtocolHandler] Exception caught inAMQProtocolSession(anonymous(26156009)), closing session explictly: java.nio.BufferUnderflowException
> java.nio.BufferUnderflowException
> 	at java.nio.Buffer.nextGetIndex(Buffer.java:474)
> 	at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:205)
> 	at org.apache.mina.common.support.BaseByteBuffer.get(BaseByteBuffer.java:203)
> 	at org.apache.mina.common.ByteBuffer.getUnsigned(ByteBuffer.java:487)
> 	at org.apache.qpid.framing.AMQShortString.readFromBuffer(AMQShortString.java:172)
> 	at org.apache.qpid.framing.EncodingUtils.readAMQShortString(EncodingUtils.java:660)
> 	at org.apache.qpid.framing.FieldTable.setFromBuffer(FieldTable.java:962)
> 	at org.apache.qpid.framing.FieldTable.populateFromBuffer(FieldTable.java:111)
> 	at org.apache.qpid.framing.FieldTable.initMapIfNecessary(FieldTable.java:171)
> 	at org.apache.qpid.framing.FieldTable.keySet(FieldTable.java:890)
> 	at org.apache.qpid.server.filter.PropertyExpression.evaluate(PropertyExpression.java:279)
> 	at org.apache.qpid.server.filter.ComparisonExpression$1.evaluate(ComparisonExpression.java:245)
> 	at org.apache.qpid.server.filter.ComparisonExpression.matches(ComparisonExpression.java:590)
> 	at org.apache.qpid.server.filter.JMSSelectorFilter.matches(JMSSelectorFilter.java:52)
> 	at org.apache.qpid.server.filter.SimpleFilterManager.allAllow(SimpleFilterManager.java:57)
> 	at org.apache.qpid.server.queue.SubscriptionImpl.checkFilters(SubscriptionImpl.java:442)
> 	at org.apache.qpid.server.queue.SubscriptionImpl.hasInterest(SubscriptionImpl.java:423)
> 	at org.apache.qpid.server.queue.SubscriptionSet.nextSubscriberImpl(SubscriptionSet.java:154)
> 	at org.apache.qpid.server.queue.SubscriptionSet.nextSubscriber(SubscriptionSet.java:129)
> 	at org.apache.qpid.server.queue.ConcurrentSelectorDeliveryManager.deliver(ConcurrentSelectorDeliveryManager.java:818)
> 	at org.apache.qpid.server.queue.AMQQueue.process(AMQQueue.java:803)
> 	at org.apache.qpid.server.txn.NonTransactionalContext.deliver(NonTransactionalContext.java:99)
> 	at org.apache.qpid.server.queue.AMQMessage.deliver(AMQMessage.java:735)
> 	at org.apache.qpid.server.queue.AMQMessage.addContentBodyFrame(AMQMessage.java:377)
> 	at org.apache.qpid.server.AMQChannel.publishContentBody(AMQChannel.java:266)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.contentBodyReceived(AMQMinaProtocolSession.java:389)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.frameReceived(AMQMinaProtocolSession.java:220)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.dataBlockReceived(AMQMinaProtocolSession.java:191)
> 	at org.apache.qpid.server.protocol.AMQPFastProtocolHandler.messageReceived(AMQPFastProtocolHandler.java:206)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$2.messageReceived(AbstractIoFilterChain.java:189)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimpleProtocolDecoderOutput.java:60)
> 	at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:185)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.qpid.pool.PoolingFilter.messageReceived(PoolingFilter.java:317)
> 	at org.apache.mina.filter.ReferenceCountingIoFilter.messageReceived(ReferenceCountingIoFilter.java:96)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.qpid.pool.Event$ReceivedEvent.process(Event.java:86)
> 	at org.apache.qpid.pool.Job.processAll(Job.java:109)
> 	at org.apache.qpid.pool.Job.run(Job.java:147)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> 	at java.lang.Thread.run(Thread.java:619)
> I don't quite see what is going wrong. However, if the FieldTable is populated from the buffer before routing then the data can be re-encoded. Simplist way to do that is to request the getHeaders().keySet()

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (QPID-677) Message properties get erased when routing message

Posted by "Martin Ritchie (JIRA)" <qp...@incubator.apache.org>.
    [ https://issues.apache.org/jira/browse/QPID-677?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12540501 ] 

Martin Ritchie commented on QPID-677:
-------------------------------------

The stack trace was from TopicSessionTest.testNoLocal

> Message properties get erased when routing message
> --------------------------------------------------
>
>                 Key: QPID-677
>                 URL: https://issues.apache.org/jira/browse/QPID-677
>             Project: Qpid
>          Issue Type: Bug
>          Components: Java Broker
>    Affects Versions: M2, M2.1
>            Reporter: Martin Ritchie
>             Fix For: M2.1
>
>
> In adding support for JMSXUserID I noted that the underlying data for the message _headers is being erased.
> I haven't had time to track this down but here is what I see.
> I update the userID value in the header to be the authenticated user id. This causes the encoded Message Headers to be set to null. The data for which is copied in to a local byte[] so can be reencoded. However, the _headers FieldTable only maintains a reference to the original ByteBuffer. When routing the message the _headers may be inspected if a Selector is being used. Because the broker has not decoded the fieldtable values it now attempts to do so. For some reason the ByteBuffer data no longer exists and so a decoding is not possible. 
> pool-2-thread-4 2007-11-06 17:30:20,983 DEBUG [qpid.server.filter.PropertyExpression] Looking up property:Selector
> Dispatcher-Channel-1 2007-11-06 17:30:20,999 DEBUG [apache.qpid.client.BasicMessageConsumer] Message is of type: org.apache.qpid.client.message.JMSTextMessage
> pool-2-thread-4 2007-11-06 17:30:20,999 ERROR [qpid.server.protocol.AMQPFastProtocolHandler] Exception caught inAMQProtocolSession(anonymous(26156009)), closing session explictly: java.nio.BufferUnderflowException
> java.nio.BufferUnderflowException
> 	at java.nio.Buffer.nextGetIndex(Buffer.java:474)
> 	at java.nio.DirectByteBuffer.get(DirectByteBuffer.java:205)
> 	at org.apache.mina.common.support.BaseByteBuffer.get(BaseByteBuffer.java:203)
> 	at org.apache.mina.common.ByteBuffer.getUnsigned(ByteBuffer.java:487)
> 	at org.apache.qpid.framing.AMQShortString.readFromBuffer(AMQShortString.java:172)
> 	at org.apache.qpid.framing.EncodingUtils.readAMQShortString(EncodingUtils.java:660)
> 	at org.apache.qpid.framing.FieldTable.setFromBuffer(FieldTable.java:962)
> 	at org.apache.qpid.framing.FieldTable.populateFromBuffer(FieldTable.java:111)
> 	at org.apache.qpid.framing.FieldTable.initMapIfNecessary(FieldTable.java:171)
> 	at org.apache.qpid.framing.FieldTable.keySet(FieldTable.java:890)
> 	at org.apache.qpid.server.filter.PropertyExpression.evaluate(PropertyExpression.java:279)
> 	at org.apache.qpid.server.filter.ComparisonExpression$1.evaluate(ComparisonExpression.java:245)
> 	at org.apache.qpid.server.filter.ComparisonExpression.matches(ComparisonExpression.java:590)
> 	at org.apache.qpid.server.filter.JMSSelectorFilter.matches(JMSSelectorFilter.java:52)
> 	at org.apache.qpid.server.filter.SimpleFilterManager.allAllow(SimpleFilterManager.java:57)
> 	at org.apache.qpid.server.queue.SubscriptionImpl.checkFilters(SubscriptionImpl.java:442)
> 	at org.apache.qpid.server.queue.SubscriptionImpl.hasInterest(SubscriptionImpl.java:423)
> 	at org.apache.qpid.server.queue.SubscriptionSet.nextSubscriberImpl(SubscriptionSet.java:154)
> 	at org.apache.qpid.server.queue.SubscriptionSet.nextSubscriber(SubscriptionSet.java:129)
> 	at org.apache.qpid.server.queue.ConcurrentSelectorDeliveryManager.deliver(ConcurrentSelectorDeliveryManager.java:818)
> 	at org.apache.qpid.server.queue.AMQQueue.process(AMQQueue.java:803)
> 	at org.apache.qpid.server.txn.NonTransactionalContext.deliver(NonTransactionalContext.java:99)
> 	at org.apache.qpid.server.queue.AMQMessage.deliver(AMQMessage.java:735)
> 	at org.apache.qpid.server.queue.AMQMessage.addContentBodyFrame(AMQMessage.java:377)
> 	at org.apache.qpid.server.AMQChannel.publishContentBody(AMQChannel.java:266)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.contentBodyReceived(AMQMinaProtocolSession.java:389)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.frameReceived(AMQMinaProtocolSession.java:220)
> 	at org.apache.qpid.server.protocol.AMQMinaProtocolSession.dataBlockReceived(AMQMinaProtocolSession.java:191)
> 	at org.apache.qpid.server.protocol.AMQPFastProtocolHandler.messageReceived(AMQPFastProtocolHandler.java:206)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$2.messageReceived(AbstractIoFilterChain.java:189)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.mina.filter.codec.support.SimpleProtocolDecoderOutput.flush(SimpleProtocolDecoderOutput.java:60)
> 	at org.apache.mina.filter.codec.ProtocolCodecFilter.messageReceived(ProtocolCodecFilter.java:185)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.qpid.pool.PoolingFilter.messageReceived(PoolingFilter.java:317)
> 	at org.apache.mina.filter.ReferenceCountingIoFilter.messageReceived(ReferenceCountingIoFilter.java:96)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.callNextMessageReceived(AbstractIoFilterChain.java:502)
> 	at org.apache.mina.common.support.AbstractIoFilterChain.access$1000(AbstractIoFilterChain.java:52)
> 	at org.apache.mina.common.support.AbstractIoFilterChain$EntryImpl$1.messageReceived(AbstractIoFilterChain.java:777)
> 	at org.apache.qpid.pool.Event$ReceivedEvent.process(Event.java:86)
> 	at org.apache.qpid.pool.Job.processAll(Job.java:109)
> 	at org.apache.qpid.pool.Job.run(Job.java:147)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> 	at java.lang.Thread.run(Thread.java:619)
> I don't quite see what is going wrong. However, if the FieldTable is populated from the buffer before routing then the data can be re-encoded. Simplist way to do that is to request the getHeaders().keySet()

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.