Hi Amila,

On Sat, Jan 29, 2011 at 11:45 AM, Amila Suriarachchi <
[email protected]> wrote:

> if those properties are not meaning full in JMS then the correct way is to
> remove from the synapse layer. Synapse does the jms transport sender
> invocation. So it should not send any unrelated stuff.
>

Synapse does not distinguish between different transports. It's a generic
mediation layer which interacts with all the transports the same way. So I
don't think special casing JMS invocations is a very good solution for
Synapse. Also it's not Synapse which invokes the sender. It's the underlying
Axis2 engine (see the stack trace).

It seems it's wrong to have '-' in JMS property names according to the specs
and that's why many brokers don't allow that. However some brokers (eg:
ActiveMQ) are more flexible in this area. So I think this is something we
should fix in the JMS transport level once and for all. WDYT?

Thanks,
Hiranya


>
> thanks,
> Amila.
>
>
> On Fri, Jan 28, 2011 at 10:18 AM, Hiranya Jayathilaka <
> [email protected]> wrote:
>
>> Hi Folks,
>>
>> Many JMS brokers/clients do not allow setting properties with the
>> character '-' in the name, on JMS messages. For instance IBM Websphere MQ
>> client library throws the following error if this is attempted:
>>
>> javax.jms.MessageFormatException: MQJMS1058: Invalid message property
>> name: Content-Type
>> at com.ibm.jms.JMSMessage.newMessageFormatException(JMSMessage.java:4772)
>> at com.ibm.jms.JMSMessage.setStringProperty(JMSMessage.java:5771)
>> at
>> org.apache.synapse.transport.jms.JMSSender.createJMSMessage(JMSSender.java:424)
>> at
>> org.apache.synapse.transport.jms.JMSSender.sendMessage(JMSSender.java:207)
>> at
>> org.apache.synapse.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:120)
>> at org.apache.axis2.engine.AxisEngine.send(AxisEngine.java:448)
>> at
>> org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.send(DynamicAxisOperation.java:190)
>> at
>> org.apache.synapse.core.axis2.DynamicAxisOperation$DynamicOperationClient.executeImpl(DynamicAxisOperation.java:174)
>> at
>> org.apache.axis2.client.OperationClient.execute(OperationClient.java:163)
>>
>> In Synapse we set request headers as properties on the outgoing JMS
>> message. If the request was received over HTTP, it will probably have a few
>> headers with the '-' character (Content-Type, Transfer-Encoding etc).  So
>> this leads to the above error with certain JMS providers. What should be the
>> correct fix for this? One option is to fix this in JMSSender and replace the
>> '-' with something like '_' in property names. We can also probably fix this
>> in Synapse layer by looking at EPR prefix (right now we workaround by
>> removing such headers using some mediators). Thoughts?
>>
>> Thanks
>> --
>> Hiranya Jayathilaka
>> Senior Software Engineer;
>> WSO2 Inc.;  http://wso2.org
>> E-mail: [email protected];  Mobile: +94 77 633 3491
>> Blog: http://techfeast-hiranya.blogspot.com
>>
>
>
>
> --
> Amila Suriarachchi
> WSO2 Inc.
> blog: http://amilachinthaka.blogspot.com/
>



-- 
Hiranya Jayathilaka
Senior Software Engineer;
WSO2 Inc.;  http://wso2.org
E-mail: [email protected];  Mobile: +94 77 633 3491
Blog: http://techfeast-hiranya.blogspot.com

Reply via email to