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] 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: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
>


Reply via email to