Dan,

It works. Thanks a lot. 

Xinxin Wang
Associate
 
Booz | Allen | Hamilton
________________________________

151 Industrial Way, Rm. 129
Eatontown, NJ 07724
 
(732) 935-5315 (office)
(732) 935-5220 (fax)
[email protected]

-----Original Message-----
From: Daniel Kulp [mailto:[email protected]] 
Sent: Wednesday, October 14, 2009 11:29 AM
To: [email protected]
Cc: Wang, Xinxin [USA]
Subject: Re: How to get CXF client from Dispacth<SOAPMessage>


The Dispatch stuff isn't a proxy and thus wouldn't work ClientProxy.  The way 
to do it is to cast to the CXF specific class:

((org.apache.cxf.jaxws.DispatchImpl)disp).getClient();

Dan



On Wed October 14 2009 11:08:13 am xinxinwang wrote:
> I created a dispatch of a CXF service using the SOAPMessage:
> 
> Service service = Service.create(new QName(dataSource.getNamespace(), 
> dataSource.getServiceName())); QName portQName = new 
> QName(dataSource.getNamespace(), dataSource.getPortTypeName()); 
> service.addPort(portQName, "SOAPBinding.SOAP11HTTP_BINDING", 
> dataSource.getURL()); Dispatch<SOAPMessage> dispSoapMsg = 
> service.createDispatch(portQName, SOAPMessage.class, 
> Service.Mode.MESSAGE);
> 
> I tried to get the CXF client using
> 
> Client client = ClientProxy.getClient(dispSoapMsg);
> 
> and got exception:
> java.lang.IllegalArgumentException: not a proxy instance
>       at java.lang.reflect.Proxy.getInvocationHandler(Proxy.java:637)
>       at org.apache.cxf.frontend.ClientProxy.getClient(ClientProxy.java:93)
>       at
> mil.army.soa.adsl.common.datasource.HTTPSOAPDataSourceUtil.init(HTTPSO
> APDat
> aSourceUtil.java:140) at
> mil.army.soa.adsl.common.test.SOAPDSUtilsFuncTest.testSOAPDSUtilUsingX
> Query
> (SOAPDSUtilsFuncTest.java:62) at
>  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.j
> ava:3
> 9) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccess
> orImp
> l.java:25) at java.lang.reflect.Method.invoke(Method.java:597)
>       at junit.framework.TestCase.runTest(TestCase.java:168)
>       at junit.framework.TestCase.runBare(TestCase.java:134)
>       at junit.framework.TestResult$1.protect(TestResult.java:110)
>       at junit.framework.TestResult.runProtected(TestResult.java:128)
>       at junit.framework.TestResult.run(TestResult.java:113)
>       at junit.framework.TestCase.run(TestCase.java:124)
>       at junit.framework.TestSuite.runTest(TestSuite.java:232)
>       at junit.framework.TestSuite.run(TestSuite.java:227)
>       at
> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.j
> ava:8
> 1) at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4T
> estRe
> ference.java:45) at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
> 38) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(Remote
> TestR
> unner.java:460) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(Remote
> TestR
> unner.java:673) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestR
> unner
> .java:386) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTest
> Runne
> r.java:196)
> 
> Then, I tried
> 
> Client client = ClientProxy.getClient(dispSoapMsg.getBinding());
> 
> and got the same exception.
> 
> I also tried to get the port first (it works with Dispactch<Source>):
> 
> SOAPMessage port = service.getPort(portQName, SOAPMessage.class); 
> Client client = ClientProxy.getClient(port);
> 
> I got another exception:
> 
> java.lang.IllegalArgumentException: javax.xml.soap.SOAPMessage is not 
> an interface
>       at java.lang.reflect.Proxy.getProxyClass(Proxy.java:362)
>       at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:581)
>       at
> org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFacto
> ryBea
> n.java:118) at
> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBea
> n.jav
> a:115) at 
> org.apache.cxf.jaxws.ServiceImpl.createPort(ServiceImpl.java:437)
>  at org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:315) at
>  org.apache.cxf.jaxws.ServiceImpl.getPort(ServiceImpl.java:302) at
>  javax.xml.ws.Service.getPort(Service.java:92)
>       at
> mil.army.soa.adsl.common.datasource.HTTPSOAPDataSourceUtil.init(HTTPSO
> APDat
> aSourceUtil.java:139) at
> mil.army.soa.adsl.common.test.SOAPDSUtilsFuncTest.testSOAPDSUtilUsingX
> Query
> (SOAPDSUtilsFuncTest.java:62) at
>  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.j
> ava:3
> 9) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccess
> orImp
> l.java:25) at java.lang.reflect.Method.invoke(Method.java:597)
>       at junit.framework.TestCase.runTest(TestCase.java:168)
>       at junit.framework.TestCase.runBare(TestCase.java:134)
>       at junit.framework.TestResult$1.protect(TestResult.java:110)
>       at junit.framework.TestResult.runProtected(TestResult.java:128)
>       at junit.framework.TestResult.run(TestResult.java:113)
>       at junit.framework.TestCase.run(TestCase.java:124)
>       at junit.framework.TestSuite.runTest(TestSuite.java:232)
>       at junit.framework.TestSuite.run(TestSuite.java:227)
>       at
> org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.j
> ava:8
> 1) at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4T
> estRe
> ference.java:45) at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
> 38) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(Remote
> TestR
> unner.java:460) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(Remote
> TestR
> unner.java:673) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestR
> unner
> .java:386) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTest
> Runne
> r.java:196)
> 
> Does anybody know how to get a CXF client from a Dispatch<SOAPMessage>?
> Thanks
> 

--
Daniel Kulp
[email protected]
http://www.dankulp.com/blog

Reply via email to