Walking through the documentation on creating a service with spring: http://cwiki.apache.org/CXF20DOC/writing-a-service-with-spring.html
It isn't really clear about how the service gets looked up and the samples don't have an example similar to the documentation. (They have more in depth stuff going on, but I just want to mess around with this basic service first.) I created a service like the documentation above has listed: package org.foo.service.web; import javax.jws.WebService; @WebService(targetNamespace = "http://foo.org/hello_world", endpointInterface = "org.foo.service.web.HelloWorld") public class HelloWorldImpl implements HelloWorld { public String sayHi(String text) { return "Hello " + text; } } and a client: package org.foo.service.web; import javax.jws.WebService; @WebService(targetNamespace = "http://foo.org/hello_world", name = "HelloWorld") public interface HelloWorld { String sayHi(String text); } The Spring service (snippet) configuration is: <import resource="classpath:META-INF/cxf/cxf.xml" /> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> <jaxws:endpoint id="helloWorld" implementor="org.foo.service.web.HelloWorldImpl" address="/HelloWorld"> <jaxws:features> <bean class="org.apache.cxf.feature.LoggingFeature"/> </jaxws:features> </jaxws:endpoint> and the Spring client configuration is: <bean id="client" class="org.foo.service.web.HelloWorld" factory-bean="clientFactory" factory-method="create"/> <bean id="clientFactory" class=" org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> <property name="serviceClass" value="org.foo.service.web.HelloWorld"/> <property name="address" value="http://localhost:8080/foo/HelloWorld "/> </bean> The service says that it deploys fine in the tomcat logs: Aug 9, 2007 9:49:38 AM org.apache.cxf.service.factory.ReflectionServiceFactoryBeanbuildServiceFromClass INFO: Creating Service {http://foo.org/hello_world}HelloWorldImplServicefrom class org.foo.service.web.HelloWorldImpl When I run the unit test though against the service I get this error: javax.xml.ws.soap.SOAPFaultException: Could not find destination factory for transport http://schemas.xmlsoap.org/soap/http at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java :168) at $Proxy42.sayHi(Unknown Source) at org.lds.ticketing.integration.WebServiceClientTest.testWebService( WebServiceClientTest.java:15) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke( NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke( DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at junit.framework.TestCase.runTest(TestCase.java:168) at junit.framework.TestCase.runBare(TestCase.java:134) at org.springframework.test.ConditionalTestCase.runBare( ConditionalTestCase.java:69) 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.OldTestClassRunner.run( OldTestClassRunner.java:76) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run( JUnit4TestReference.java:38) at org.eclipse.jdt.internal.junit.runner.TestExecution.run( TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests( RemoteTestRunner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests( RemoteTestRunner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run( RemoteTestRunner.java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main( RemoteTestRunner.java:196) Caused by: java.lang.RuntimeException: Could not find destination factory for transport http://schemas.xmlsoap.org/soap/http at org.apache.cxf.binding.soap.SoapTransportFactory.getConduit( SoapTransportFactory.java:148) at org.apache.cxf.endpoint.AbstractConduitSelector.getSelectedConduit( AbstractConduitSelector.java:73) at org.apache.cxf.endpoint.UpfrontConduitSelector.prepare( UpfrontConduitSelector.java:61) at org.apache.cxf.endpoint.ClientImpl.prepareConduitSelector( ClientImpl.java:421) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:250) at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:204) at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73) at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java :134) ... 22 more The unit test is this: import org.junit.Test; import org.foo.spring.test.AbstractTestNGTransactionalSpringIntegrationTests ; import org.foo.service.web.HelloWorld; import org.testng.Assert; public class WebServiceClientTest extends AbstractTestNGTransactionalSpringIntegrationTests { @Test public void testWebService() { HelloWorld client = (HelloWorld) applicationContext.getBean ("client"); String hi = client.sayHi("service"); Assert.assertEquals(hi, "service", "Should be Equal"); } } What am I missing? Thanks, Bryan
