Good to know! Thanks, Dan. On 12/4/06, Dan Diephouse <[EMAIL PROTECTED]> wrote:
Just an FYI - the website is a wiki underneath. Click "Edit Page" on the right and you should be able to add your own information to the JMS page. Regards, - Dan On 12/1/06, Ruth, Brice D <[EMAIL PROTECTED]> wrote: > > Very nice. Good to know. It'd be good to pull this info together & > publish it out somewhere (got a blog?) - I imagine it would be useful to > others! > > Nice way to get 2-phase commit w/ a service if you can't do WS-AT yet. > > -Brice > > -----Original Message----- > *From:* Wayne Keenan [mailto:[EMAIL PROTECTED] > *Sent:* Friday, December 01, 2006 10:17 AM > *To:* [email protected] > *Subject:* Re: [xfire-user] Set JMSChannel replyTo > > Sorry, that;s misleasding debug, as the reply-to isnt in the message > context. > Stopping the server and inspecting the message on the queue shows that > the JMS (cough, MQ) reply-to variable is set correctly. > > > On 01/12/06, Ruth, Brice D <[EMAIL PROTECTED]> wrote: > > > > 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]> wrote: > > > > > > It works, and I have discovered that this line in the client: > > > > > > ((XFireProxy) Proxy.getInvocationHandler > > > (echo)).getClient().setEndpointUri("jms://ARSYSTEM_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/" > > > 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></soap: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/ > > > " 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></soap: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(LocateBindingHandler.java > > > :39) > > > > > > > > > > > > > > > > > > > > > > > > On 30/11/06, Ruth, Brice D < [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/main/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_BINDINGS_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 > > > > ")); > > > > 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] 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:Body></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:131) > > > > 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( > > > > JMSWSEchoTest.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 > > > > > > > > > > > > > > > > > > > -- Dan Diephouse Envoi Solutions http://envoisolutions.com | http://netzooid.com/blog
-- Brice Ruth Software Engineer, Madison WI
