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
