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

Reply via email to