Hi Daniel, Thanks for your pointers. It worked.
regards, sathwik On Wed, Apr 15, 2015 at 11:02 PM, Daniel Kulp <[email protected]> wrote: > I would likely use a generic JAX-WS Provider<Source> based service and use > the JaxWsServerFactoryBean to start it up. You can omit the wsdlLocation > and such from the Provider object as long as you get all of that property > set on the JaxWsServerFactoryBean (note: this is JaxWsServerFactoryBean, > NOT JaxWsServiceFactoryBean) prior to calling the create. > > I think a chunk of your issue is using JaxWsServiceFactoryBean. That bean > is used internally to the JaxWsServerFactoryBean to setup the object model > representing the service, but the Server factory bean is what is needed to > actually create the server that would process messages. You’d likely > also need to call the setServiceName(…) and possibly setEndpointName(…) > methods on the JaxWsServerFactoryBean to denote which service/port in the > WSDL you want the service to represent. > > Dan > > > > On Apr 14, 2015, at 11:45 PM, Sathwik B P <[email protected]> wrote: > > > > Hi Adrei, > > > > Thanks for your response. > > > > The requirement is, > > "There would be one generic service implementation class for ANY given > WSDL > > definition". Irrespective of the service names, port names, wsdl > > operations, all requests coming in should land on the same service > > implementation method. > > > > HelloWorld.wsdl -> CommonProviderService > > Greeter.wsdl -> CommonProviderService > > Stock.wsdl -> CommonProviderService > > > > Henceforth I cannot embed the portName or the service names in the > Provider > > class. > > > > This service is like a passthrough, the payload will be consumed and > > response will be generated by our runtime components in the system. > > > > > > *Update:* > > *I could get over the previous error by explicitly setting the > serviceName > > and endpointName in the bean.* > > > > *But now I don't see the service registered under CXFNoSpringSevlet and > > neither do I get the publised WSDL from the service.* > > > > regards, > > sathwik > > > > On Wed, Apr 15, 2015 at 12:48 AM, Andrei Shakirin <[email protected]> > > wrote: > > > >> Hi, > >> > >> The error message says that service name in your wsdl doesn't match to > >> default service name generated on the base of CommonProvider class. > >> You can configure service name using @WebServiceProvider annotation: > >> > >> @WebServiceProvider(portName = " CommonProvider", serviceName = " > >> CommonProviderService ", > >> targetNamespace = " http://provider.example/) > >> @ServiceMode(value=Service.Mode.PAYLOAD) > >> public class CommonProvider implements Provider<Source> {...} > >> > >> By the way there is more portable way to create service implementing > >> Provider interface: using javax.xml.ws.Endpoint. > >> Take a look this example for details: > >> > https://github.com/apache/cxf/blob/master/distribution/src/main/release/samples/jaxws_dispatch_provider/src/main/java/demo/hwDispatch/server/Server.java > >> > >> Regards, > >> Andrei. > >> > >> > >>> -----Original Message----- > >>> From: Sathwik B P [mailto:[email protected]] > >>> Sent: Dienstag, 14. April 2015 11:26 > >>> To: [email protected] > >>> Subject: Need a generic service impl for any given WSDL Definition > >>> > >>> Hi Guys, > >>> > >>> > >>> We need to create cxf services from wsdl definitions. There would be > one > >>> generic service implementation class for any given WSDL service. > >>> > >>> So I suppose implementation of javax.xml.ws.Provider interface would > the > >> right > >>> choice here. > >>> > >>> I have been working with ReflectionServiceFactoryBean and > >>> JaxWsServiceFactoryBean but not been able to create the service at all. > >>> > >>> Here is the code snippet, > >>> > >>> URL resource = > >>> getClass().getResource("/examples/client/HelloWorld.wsdl"); > >>> Bus bus = BusFactory.newInstance().createBus(); > >>> ReflectionServiceFactoryBean bean = new > >> ReflectionServiceFactoryBean(); > >>> bean.setWsdlURL(resource.toString()); > >>> bean.setBus(bus); > >>> bean.setPopulateFromClass(false); > >>> bean.setServiceClass(CommonProvider.class); > >>> bean.create(); > >>> > >>> > >>> @WebServiceProvider() > >>> @ServiceMode(value=Service.Mode.PAYLOAD) > >>> public class CommonProvider implements Provider<Source> {...} > >>> > >>> > >>> *Error:org.apache.cxf.service.factory.ServiceConstructionException: > >> Could not > >>> find definition for service { > >> http://provider.example/}CommonProviderService > >>> <http://provider.example/}CommonProviderService>.* > >>> > >>> It's pretty much the code from ProviderServiceFactoryTest > >>> > >>> What am I missing here? > >>> > >>> regards, > >>> sathwik > >> > > -- > Daniel Kulp > [email protected] - http://dankulp.com/blog > Talend Community Coder - http://coders.talend.com > >
