[ 
https://issues.apache.org/jira/browse/QPIDJMS-48?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14543598#comment-14543598
 ] 

Robbie Gemmell commented on QPIDJMS-48:
---------------------------------------

Hi Jakub,

Thanks for pointing this out. I agree that the behaviour is inconsistent, and 
either the invalid (in JMS) property name shouldnt be returned from 
getPropertyNames, or what is returned shoudl work with get*Property(). Property 
names are a problem point for AMQP <-> JMS because of the different legal 
values, it was envisaged we might come up with some sort of reversible mapping 
to a vendor property for the AMQP JMS Mapping to address this, but that hasn't 
happened yet.

Robbie

> Handling of properties with "." in their name
> ---------------------------------------------
>
>                 Key: QPIDJMS-48
>                 URL: https://issues.apache.org/jira/browse/QPIDJMS-48
>             Project: Qpid JMS
>          Issue Type: Bug
>          Components: qpid-jms-client
>    Affects Versions: 0.1.0
>            Reporter: Jakub Scholz
>
> The Qpid C++ broker - which supports both AMQP 0.10 and 1.0 - delivers quite 
> often messages with a property containing "." in the property name. In 
> particular, the property "qpid.subject" can be seen quite often, because it 
> is attached automatically to the message by some AMQP 0.10 clients.
> The current handling of message properties with "." in their name seems to be 
> a bit strange in the Qpid JMS client. When the client receives a message with 
> this property, its property name is returned by the method getPropertyNames() 
> including the dot. However, when I try to call some method to actually get 
> the property value - e.g. getStringProperty("qpid.subject"), I get an 
> exception:
> javax.jms.JMSException: Identifier contains invalid JMS identifier character 
> '.': 'qpid.subject' 
>       at 
> org.apache.qpid.jms.exceptions.JmsExceptionSupport.create(JmsExceptionSupport.java:77)
>       at org.apache.qpid.jms.JmsConnection.onException(JmsConnection.java:481)
>       at 
> org.apache.qpid.jms.JmsMessageConsumer$MessageDeliverTask.run(JmsMessageConsumer.java:602)
>       at 
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
>       at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
>       at java.lang.Thread.run(Thread.java:744)
> Caused by: java.lang.IllegalArgumentException: Identifier contains invalid 
> JMS identifier character '.': 'qpid.subject' 
>       at 
> org.apache.qpid.jms.message.JmsMessage.checkIdentifierLetterAndDigitRequirements(JmsMessage.java:568)
>       at 
> org.apache.qpid.jms.message.JmsMessage.checkIdentifierFormat(JmsMessage.java:531)
>       at 
> org.apache.qpid.jms.message.JmsMessage.checkPropertyNameIsValid(JmsMessage.java:527)
>       at 
> org.apache.qpid.jms.message.JmsMessage.getObjectProperty(JmsMessage.java:296)
>       at 
> org.apache.qpid.jms.message.JmsMessage.getStringProperty(JmsMessage.java:393)
>       at cz.scholz.amqp10.jms.Listener.onMessage(Listener.java:72)
>       at 
> org.apache.qpid.jms.JmsMessageConsumer$MessageDeliverTask.run(JmsMessageConsumer.java:592)
>       ... 3 more
> This causes problems when you client wants to iterate over all message 
> properties and I think the behavior should be more consistent. If the 
> property is returned by getPropertyNames(), then the get*Property() should 
> work too. Or other way around - if get*Property cannot be used for such 
> property, it should not be returned in getPropertyNames().



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to