Hi Shantanu
You are spot on correct in your analysis, and earlier this week I committed a patch that would fix the above, but unfortunately had to revert it back due to unit test failures as I didn't have time to investigate it due to commitments on Apache Synapse. I will promise to commit this patch with proper testing over this weekend and I think you could test it early next week and give me first hand feedback17:12:30,812 ERROR [JMSMessageReceiver] JMS Worker [JMSWorker-1] Encountered an Axis Fault : The [action] cannot be processed at the receiver. org.apache.axis2.AxisFault: The [action] cannot be processed at the receiver. at org.apache.axis2.addressing.AddressingFaultsHelper.triggerAddressingF ault(AddressingFaultsHelper.java:346) at org.apache.axis2.addressing.AddressingFaultsHelper.triggerActionNotSu pportedFault(AddressingFaultsHelper.java:311) at org.apache.axis2.handlers.addressing.AddressingValidationHandler.chec kAction(AddressingValidationHandler.java:137) at org.apache.axis2.handlers.addressing.AddressingValidationHandler.invo ke(AddressingValidationHandler.java:50) at org.apache.axis2.engine.Phase.invoke(Phase.java:383) at org.apache.axis2.engine.AxisEngine.invoke(AxisEngine.java:203) ...On investigating, it seems that the AddressValidationHandler.checkAction will always throw this exception as the following code indicated if the operation and service values are null. --- if ((msgContext.getAxisService() == null) || (msgContext.getAxisOperation() == null)) { AddressingFaultsHelper .triggerActionNotSupportedFault(msgContext, msgContext.getWSAAction()); } ---- Now here is the envelope that is generated by the stub and published in the JMS message: --- <?xml version="1.0" encoding="utf-8"?> <soapenv:Header> <wsa:To>jms:/queue/requestQ?transport.jms.ConnectionFactoryJNDIName=ConnectionFactory&java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory&java.naming.provider.url=jnp://localhost:1099</wsa:To> <wsa:ReplyTo> http://www.w3.org/2005/08/addressing/anonymous </wsa:ReplyTo> <wsa:MessageID>urn:uuid:6EE9E1632283F7F99D1174613253567</wsa:MessageID> <wsa:Action>urn:getPrice</wsa:Action> </soapenv:Header> <soapenv:Body><ns1:symbol>MSFT</ns1:symbol></ns1:getPrice> </soapenv:Body> </soapenv:Envelope> -- I also noted that previous to invoking the handlers in the dispatch phase (i.e. in the pre-dispatch phase), the AddressingInHandler successfully parses the wsa:Action info from the soap headers. Should'nt this be responsible for setting the operation (getPrice) in this case? I tried to find out why the messageContext was not getting filled with the serviceName. It seems that in JMSMessageReceiver.createMessageContext, it looks for the servicename based on the destinationName as shown in the following code: -- Destination dest = message.getJMSDestination(); String destinationName = null; if (dest instanceof Queue) { destinationName = ((Queue) dest).getQueueName(); } else if (dest instanceof Topic) { destinationName = ((Topic) dest).getTopicName(); } String serviceName = jmsConFac.getServiceNameForDestination(destinationName); --- However, the destination name in this case (JBOSS MQ) is 'requestQ'. Note that the services.xml contains the following as the parameter: <parameter name="transport.jms.Destination" locked="true">queue/requestQ</parameter> And the JMSConnectionFactory stores the mapping as follows in the destinations variable: {queue/requestQ=StockQuoteService} Hence the serviceName is returned as null since JBOSS returns requestQ and not queue/requestQ as the destination name.
asankha --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
