Hmm, odd. The DEBUG logs seem to indicate that the reply-to still isn't being set ... good that its working, though! :) 1219 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - msgctx.getProp(REPLY_TO):null -----Original Message----- From: Wayne Keenan [mailto:[EMAIL PROTECTED] Sent: Friday, December 01, 2006 3:36 AM To: [email protected] Subject: Re: [xfire-user] Set JMSChannel replyTo
This works fine now. I had some (duplicate) server side test code messing things up on the service registry side. On 30/11/06, Wayne Keenan < [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > wrote: It works, and I have discovered that this line in the client: ((XFireProxy) Proxy.getInvocationHandler(echo)).getClient().setEndpointUri("jms://ARSY STEM_OUTBOUND"); sets the replyto queue. (see server log below) I have added my own additional logging and have also created and additional JMS sessions (1 'in', 1 'out') in JMSChannel to get around the MQ asych error, I dont think this is a 'proper all encompasing fix', it just solves my needs at the moment. But, my problem at the moment is that the Service (in this case Echo) does not seem to come accross: client log: 719 [main] DEBUG org.codehaus.xfire.client.XFireProxy - Method [echo] [hello] 719 [main] DEBUG org.codehaus.xfire.transport.jms.JMSTransport - Creating new channel for uri: jms://ARSYSTEM_OUTBOUND 735 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - DestName :ARSYSTEM_OUTBOUND 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - adding handler [EMAIL PROTECTED] to phase send 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - adding handler [EMAIL PROTECTED] to phase transport 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - adding handler [EMAIL PROTECTED] to phase post-invoke 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking phase post-invoke 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking handler org.codehaus.xfire.soap.handler.SoapSerializerHandler in phase post-invoke 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking phase policy 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking phase user 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking phase transport 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking handler org.codehaus.xfire.soap.handler.SoapActionOutHandler in phase transport 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking phase send 1094 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking handler org.codehaus.xfire.handler.OutMessageSender in phase send 1219 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - ResponseURI:jms://ARSYSTEM_INBOUND?Echo 1219 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - msgtxt:<soap:Envelope xmlns:soap=" http://schemas.xmlsoap.org/soap/envelope/ <http://schemas.xmlsoap.org/soap/envelope/> " xmlns:xsd=" http://www.w3.org/2001/XMLSchema" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance <http://www.w3.org/2001/XMLSchema-instance> "><soap:Body><echo xmlns=" http://test.xfire.codehaus.org"><in0>hello</in0></echo></soap:Body></soa p:Envelope> 1219 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - corrid:11649244730150-704411791 1219 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - msgctx.getProp(REPLY_TO):null 1219 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - selector= 1250 [main] INFO org.codehaus.xfire.transport.jms.JMSChannel - Sent message: Source ID: 65B4422E-55DF-C388-8ABA-6D2E56F491E3 Destination: null JMSType: null 11407 [main] DEBUG org.codehaus.xfire.client.XFireProxy - Result [null] response:null server log: 30/11/2006 22:07:53,171 DEBUG asyncDelivery2 JMSChannel.onMessage - recv msg=<soap:Envelope xmlns:soap=" http://schemas.xmlsoap.org/soap/envelope/ <http://schemas.xmlsoap.org/soap/envelope/> " xmlns:xsd="http://www.w3.org/2001/XMLSchema " xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "><soap:Body><echo xmlns=" http://test.xfire.codehaus.org"><in0>hello</in0></echo></soap:Body></soa p:Envelope> 30/11/2006 22:07:53,171 DEBUG asyncDelivery2 JMSChannel.onMessage - dest name=ARSYSTEM_INBOUND 30/11/2006 22:07:53,171 DEBUG asyncDelivery2 JMSChannel.onMessage - reply-to=queue:///ARSYSTEM_OUTBOUND 30/11/2006 22:07:53,171 DEBUG asyncDelivery2 DefaultEndpoint.onReceive - Received message to jms://ARSYSTEM_INBOUND 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.addHandler - adding handler [EMAIL PROTECTED] to phase dispatch 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.addHandler - adding handler [EMAIL PROTECTED] to phase parse 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.addHandler - adding handler [EMAIL PROTECTED] to phase pre-invoke 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.addHandler - adding handler [EMAIL PROTECTED] to phase dispatch 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.addHandler - adding handler [EMAIL PROTECTED] to phase dispatch 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.addHandler - adding handler [EMAIL PROTECTED] to phase dispatch 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.invoke - Invoking phase transport 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.invoke - Invoking phase parse 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.invoke - Invoking handler org.codehaus.xfire.soap.handler.ReadHeadersHandler in phase parse 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.invoke - Invoking phase pre-dispatch 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.invoke - Invoking phase dispatch 30/11/2006 22:07:53,187 DEBUG asyncDelivery2 HandlerPipeline.invoke - Invoking handler org.codehaus.xfire.handler.LocateBindingHandler in phase dispatch 30/11/2006 22:07:53,187 INFO asyncDelivery2 DefaultFaultHandler.invoke - Fault occurred! org.codehaus.xfire.fault.XFireFault: Could not find a service to invoke. at org.codehaus.xfire.handler.LocateBindingHandler.invoke(LocateBindingHand ler.java:39) On 30/11/06, Ruth, Brice D < [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > wrote: Wow, I had no idea you could use the XFire client for JMS. That's pretty cool (if it works). Um ... the problem here seems to be that you're not setting the ReplyTo. That may be what MQ is balking on as well. Hmmm. It looks like JMSChannel.java in XFire sets the JMSReplyTo from a javax.jms.Destination (say, a Queue) that is stored in the MessageContext under the key "REPLY_TO". Look here: http://svn.xfire.codehaus.org/browse/xfire/trunk/xfire/xfire-jms/src/mai n/org/codehaus/xfire/transport/jms/JMSChannel.java?r=trunk At approx. lines 194,205. It looks like the XFire client (org.codehaus.xfire.client.Client) extends org.codehaus.xfire.AbstractContext, so just calling: getClient().setProperty("REPLY_TO", <destination>) might work. I don't have a working MQ setup at the moment, otherwise I'd try. Cheers, Brice -----Original Message----- From: Wayne Keenan [mailto:[EMAIL PROTECTED] Sent: Thursday, November 30, 2006 2:39 PM To: [email protected] Subject: Re: [xfire-user] Set JMSChannel replyTo Thanks for the response. I think I need to set ws addressing on the dynamic client, but Im a unsure how. I am registering the JMS transport before creating the dynamic client, below are the logs. perhaps what im trying is completely wrong w/ dynamic client as im getting a MQ error: Caused by: javax.jms.JMSException: MQJMS1013: operation invalid whilst session is using asynchronous delivery my test client is: import java.lang.reflect.Proxy; import java.net.MalformedURLException; import java.net.URL; import javax.jms.QueueConnectionFactory; import org.codehaus.xfire.DefaultXFire; import org.codehaus.xfire.XFire ; import org.codehaus.xfire.client.Client; import org.codehaus.xfire.client.XFireProxy; import org.codehaus.xfire.client.XFireProxyFactory; import org.codehaus.xfire.service.Service; import org.codehaus.xfire.service.binding.ObjectServiceFactory ; import org.codehaus.xfire.test.Echo; import org.codehaus.xfire.transport.jms.JMSTransport; import com.ibm.mq.jms.JMSC; import com.ibm.mq.jms.MQQueueConnectionFactory; public class JMSWSEchoTest { private XFire xfire; private QueueConnectionFactory factory; private JMSTransport transport; public void setUp() throws Exception { factory = new MQQueueConnectionFactory(); ((MQQueueConnectionFactory)factory).setTransportType(JMSC.MQJMS_TP_BINDI NGS_MQ); ((MQQueueConnectionFactory)factory).setHostName("localhost"); ((MQQueueConnectionFactory)factory).setQueueManager("QM_server"); ((MQQueueConnectionFactory)factory).setPort(1414); xfire = new DefaultXFire(); transport = (JMSTransport) new JMSTransport(xfire, factory); xfire.getTransportManager ().register(transport); } public void testClient1() throws Exception { // Create a ServiceFactory to create the ServiceModel. // We need to add the JMSTransport to the list of bindings to create. ObjectServiceFactory sf = new ObjectServiceFactory(xfire.getTransportManager()); sf.addSoap11Transport(JMSTransport.BINDING_ID); // Create the service model Service serviceModel = sf.create(Echo.class); // Create a proxy for the service XFireProxyFactory factory = new XFireProxyFactory(xfire); Echo echo = (Echo) factory.create(serviceModel, "jms://ARSYSTEM_OUTBOUND"); // Since JMS doesn't really have a concept of anonymous endpoints, we // need // need to let xfire know what JMS endpoint we should use ((XFireProxy) Proxy.getInvocationHandler (echo)).getClient().setEndpointUri("jms://ARSYSTEM_INBOUND"); // run the client! String resString = echo.echo("hello"); //assertEquals("hello", resString); System.out.println("response:" + resString); } public void testClient2() throws MalformedURLException, Exception { Client client = new Client(new URL(" http://localhost:8191/Echo?wsdl <http://localhost:8191/Echo?wsdl> ")); Object[] response = client.invoke("echo", new Object[] {"hello"}); System.out.println((String) response[0]); } public static void main(String args[]) throws Exception { try { JMSWSEchoTest jwt = new JMSWSEchoTest(); jwt.setUp(); jwt.testClient1(); } catch (/*MalformedURL*/Exception e) { e.printStackTrace(); } } } 0 [main] DEBUG org.codehaus.xfire.transport.DefaultTransportManager - Registered transport [EMAIL PROTECTED] 0 [main] DEBUG org.codehaus.xfire.transport.DefaultTransportManager - Registered transport [EMAIL PROTECTED] 15 [main] DEBUG org.codehaus.xfire.transport.DefaultTransportManager - Registered transport [EMAIL PROTECTED] 15 [main] DEBUG org.codehaus.xfire.transport.DefaultTransportManager - Registered transport [EMAIL PROTECTED] 15 [main] DEBUG org.codehaus.xfire.transport.DefaultTransportManager - Registered transport [EMAIL PROTECTED] 1422 [main] DEBUG org.codehaus.xfire.transport.DefaultTransportManager - Registered transport [EMAIL PROTECTED] 1422 [main] DEBUG org.codehaus.xfire.transport.DefaultTransportManager - Registered transport [EMAIL PROTECTED] 1422 [main] DEBUG org.codehaus.xfire.transport.DefaultTransportManager - Registered transport [EMAIL PROTECTED] 1422 [main] DEBUG org.codehaus.xfire.transport.DefaultTransportManager - Registered transport [EMAIL PROTECTED] 2734 [main] DEBUG org.codehaus.xfire.client.XFireProxy - Method [echo] [hello] 2734 [main] DEBUG org.codehaus.xfire.transport.jms.JMSTransport - Creating new channel for uri: jms://ARSYSTEM_INBOUND 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - adding handler [EMAIL PROTECTED] to phase send 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - adding handler [EMAIL PROTECTED] to phase transport 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - adding handler [EMAIL PROTECTED] to phase post-invoke 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking phase post-invoke 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking handler org.codehaus.xfire.soap.handler.SoapSerializerHandler in phase post-invoke 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking phase policy 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking phase user 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking phase transport 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking handler org.codehaus.xfire.soap.handler.SoapActionOutHandler in phase transport 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking phase send 3875 [main] DEBUG org.codehaus.xfire.handler.HandlerPipeline - Invoking handler org.codehaus.xfire.handler.OutMessageSender in phase send 4172 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - ResponseURI:jms://ARSYSTEM_OUTBOUND 4172 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - msgtxt:<soap:Envelope xmlns:soap=" http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance"><soap:Body><echo xmlns="http://test.xfire.codehaus.org"><in0>hello</in0></echo></soap:Bod y></soap:Envelope> 4172 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - corrid:11649131364370-593738066 4172 [main] DEBUG org.codehaus.xfire.transport.jms.JMSChannel - msgctx.getProp(REPLY_TO):null org.codehaus.xfire.XFireRuntimeException : Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Error sending message org.codehaus.xfire.fault.XFireFault: Error sending message at org.codehaus.xfire.transport.jms.JMSChannel.send (JMSChannel.java:246) at org.codehaus.xfire.handler.OutMessageSender.invoke(OutMessageSender.java :26) at org.codehaus.xfire.handler.HandlerPipeline.invoke(HandlerPipeline.java:1 31) at org.codehaus.xfire.client.Invocation.invoke (Invocation.java:75) at org.codehaus.xfire.client.Client.invoke(Client.java:335) at org.codehaus.xfire.client.XFireProxy.handleRequest(XFireProxy.java:77) at org.codehaus.xfire.client.XFireProxy.invoke (XFireProxy.java:57) at $Proxy0.echo(Unknown Source) at com.turingsmi.messagelogic.net.tests.JMSWSEchoTest.testClient1(JMSWSEcho Test.java:66) at com.turingsmi.messagelogic.net.tests.JMSWSEchoTest.main (JMSWSEchoTest.java:85) Caused by: javax.jms.JMSException: MQJMS1013: operation invalid whilst session is using asynchronous delivery at com.ibm.mq.jms.services.ConfigEnvironment.newException(ConfigEnvironment .java :567) at com.ibm.mq.jms.MQMessageProducer.send(MQMessageProducer.java:1193) at com.ibm.mq.jms.MQMessageProducer.send(MQMessageProducer.java:3123) at org.codehaus.xfire.transport.jms.JMSChannel.send(JMSChannel.java :238) ... 9 more On 30/11/06, Ruth, Brice D <[EMAIL PROTECTED]> wrote: I'm not sure what you mean w/ dynamic client ... I don't think the dynamic client understands JMS, does it? Maybe it does and I've missed something. When we've setup JMS with XFire in an MQ Series environment, the MQ client application set the ReplyTo in the API calls to the MQ jars - so its specified in the JMS message. XFire just picks it up from there and does the right thing. You don't need to specify the reply-to on the server side, if memory serves. Cheers, Brice -----Original Message----- From: Wayne Keenan [mailto:[EMAIL PROTECTED] Sent: Thursday, November 30, 2006 12:15 PM To: [email protected] Subject: [xfire-user] Set JMSChannel replyTo Hi, Please can someone advise me on how I set the JMS ReplyTo property on the serverside service.xml and also for a 'DynamicClient'? Thanks Wayne
