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(HTTPSOAPDat
> aSourceUtil.java:140) at
> mil.army.soa.adsl.common.test.SOAPDSUtilsFuncTest.testSOAPDSUtilUsingXQuery
> (SOAPDSUtilsFuncTest.java:62) at
>  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:3
> 9) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp
> 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.java:8
> 1) at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestRe
> ference.java:45) at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
> 38) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR
> unner.java:460) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR
> unner.java:673) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner
> .java:386) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunne
> 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(ClientProxyFactoryBea
> n.java:118) at
> org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.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(HTTPSOAPDat
> aSourceUtil.java:139) at
> mil.army.soa.adsl.common.test.SOAPDSUtilsFuncTest.testSOAPDSUtilUsingXQuery
> (SOAPDSUtilsFuncTest.java:62) at
>  sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:3
> 9) at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp
> 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.java:8
> 1) at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestRe
> ference.java:45) at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
> 38) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR
> unner.java:460) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR
> unner.java:673) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner
> .java:386) at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunne
> 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