Hi Sergey,
Not sure if I'm the right track.
What I need is to enable the following scenario.
Client ----> JAXRSEntryService -----+-------> JAXTargetResource1
|
|+------->
JAXTargetResource-n
The Entry service will perform a table lookup of the target resource's
path based on an input parameter from the external client. I would
then use the client in the JAXRSEntryService to call the target
resources using the local transport. The target resources are all in
the same Spring container.
Specifying the ServiceClass means I know the target resource I'm
calling upfront? In this case I don't know it. What's the best
approach to do this. Do I just create a webclient and use the local
transport in the URL?
Regards
Kiren
On Thu, Aug 7, 2014 at 2:18 PM, Sergey Beryozkin <[email protected]> wrote:
> Hi Kiren
> Looks like a jaxrs:client/@serviceClass is missing
>
> Cheers, Sergey
>
> On 07/08/14 14:25, Kiren Pillay wrote:
>>
>> Hi Sergey,
>>
>> I'm trying to use the local transport as outlined in our email before.
>>
>> I can't seem to get the client injected into my Service bean (I'm using
>> 2.7.7).
>>
>> <!-- local transport -->
>> <jaxrs:server id="localRestContainer" address="local://rsservice"
>> transportId="http://cxf.apache.org/transports/local">
>> <jaxrs:serviceBeans>
>> <ref bean="msisdnLessSimService" />
>> </jaxrs:serviceBeans>
>> <jaxrs:providers>
>> <ref bean="jaxbProvider" />
>> <ref bean="pamsExceptionMapper" />
>> <ref bean="pamsRuntimeExceptionMapper" />
>> </jaxrs:providers>
>>
>> <jaxrs:invoker>
>> <bean
>> class="za.co.vodacom.pams.bs.WebServiceAuthorizationInvoker" />
>> </jaxrs:invoker>
>> </jaxrs:server>
>>
>> <!-- Local transport -->
>> <jaxrs:client id="webClient" address="local://rsservice" >
>> </jaxrs:client>
>> <bean id="pamsInfo"
>> class="za.co.vodacom.pams.bs.info.PAMSInfoServiceImpl">
>> <property name="webClient" ref="webClient"></property>
>> </bean>
>>
>> [ContextLoader]initWebApplicationContext(main) 308
>> org.springframework.beans.factory.BeanCreationException: Error
>> creating bean with name 'webClient': Instantiation of bean failed;
>> nested exception is
>> org.springframework.beans.factory.BeanDefinitionStoreException:
>> Factory method [public org.apache.cxf.jaxrs.client.Client
>> org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean.create()] threw
>> exception; nested exception is javax.ws.rs.NotFoundException
>> at
>> org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:581)
>> at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1015)
>> at
>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911)
>>
>> On Sun, Nov 17, 2013 at 5:47 PM, Kiren Pillay <[email protected]>
>> wrote:
>>>
>>> Okay, I was was supposed to use "#" in front of bean name.
>>>
>>> Thx
>>>
>>>
>>> On Sun, Nov 17, 2013 at 11:42 AM, Kiren Pillay <[email protected]>
>>> wrote:
>>>>
>>>>
>>>> Hi Sergei,
>>>>
>>>> I'm trying to use the bean reference for the implementing class but am
>>>> getting a classNotFoundError (CXF2.7.7). Is this a bug or is there a
>>>> special
>>>> way to reference the bean. Also, wouldn't it be better to have a
>>>> bean-ref
>>>> attribute rather than the implementor attribute?
>>>>
>>>> <bean id="soapMmsBilling"
>>>> class="za.co.vodacom.pams.soap.SoapMmsBillingRequestImpl">
>>>> <!-- Inject local client
>>>> <property name="localRestClient" ref="localHttpClient"/>-->
>>>> </bean>
>>>>
>>>> <jaxws:endpoint id="MmsBillingSoapWebservice"
>>>> serviceName="customer:OpenWaveMmsBilling" implementor="soapMmsBilling"
>>>> xmlns:customer="http://www.openwave.com/protocols/oip/">
>>>> <jaxws:features>
>>>> <bean class="org.apache.cxf.feature.LoggingFeature" />
>>>> </jaxws:features>
>>>> </jaxws:endpoint>
>>>>
>>>>
>>>> org.springframework.beans.factory.BeanCreationException: Error creating
>>>> bean with name 'MmsBillingSoapWebservice': Cannot create inner bean
>>>> '(inner
>>>> bean)' of type [soapMmsBilling] while setting constructor argument;
>>>> nested
>>>> exception is
>>>> org.springframework.beans.factory.CannotLoadBeanClassException:
>>>> Cannot find class [soapMmsBilling] for bean with name '(inner bean)#1'
>>>> defined in null; nested exception is java.lang.ClassNotFoundException:
>>>> soapMmsBilling
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:281)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:125)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:616)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
>>>> at
>>>>
>>>> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
>>>> at
>>>>
>>>> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
>>>> at
>>>>
>>>> org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:385)
>>>> at
>>>>
>>>> org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:284)
>>>> at
>>>>
>>>> org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
>>>> at
>>>>
>>>> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
>>>> at
>>>>
>>>> org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
>>>> at
>>>>
>>>> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
>>>> at
>>>> org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
>>>> at
>>>> org.apache.catalina.core.StandardHost.addChild(StandardHost.java:623)
>>>> at
>>>>
>>>> org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)
>>>> at
>>>>
>>>> org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)
>>>> at
>>>> org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
>>>> at
>>>> org.apache.catalina.startup.HostConfig.start(HostConfig.java:1322)
>>>> at
>>>>
>>>> org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
>>>> at
>>>>
>>>> org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
>>>> at
>>>> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
>>>> at
>>>> org.apache.catalina.core.StandardHost.start(StandardHost.java:862)
>>>> at
>>>> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
>>>> at
>>>> org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
>>>> at
>>>> org.apache.catalina.core.StandardService.start(StandardService.java:525)
>>>> at
>>>> org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
>>>> at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>>> at
>>>>
>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
>>>> at
>>>>
>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
>>>> at java.lang.reflect.Method.invoke(Method.java:601)
>>>> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
>>>> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
>>>> Caused by:
>>>> org.springframework.beans.factory.CannotLoadBeanClassException:
>>>> Cannot find class [soapMmsBilling] for bean with name '(inner bean)#1'
>>>> defined in null; nested exception is java.lang.ClassNotFoundException:
>>>> soapMmsBilling
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1262)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:433)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:270)
>>>> ... 41 more
>>>> Caused by: java.lang.ClassNotFoundException: soapMmsBilling
>>>> at
>>>>
>>>> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
>>>> at
>>>>
>>>> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
>>>> at org.springframework.util.ClassUtils.forName(ClassUtils.java:258)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:417)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1283)
>>>> at
>>>>
>>>> org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1254)
>>>>
>>>>
>>>> On Thu, Nov 14, 2013 at 12:54 PM, Kiren Pillay <[email protected]>
>>>> wrote:
>>>>>
>>>>>
>>>>> Thanks Sergey, will give it a try!
>>>>>
>>>>> Regards
>>>>> Kiren
>>>>>
>>>>>
>>>>> On Thu, Nov 14, 2013 at 12:36 PM, Sergey Beryozkin
>>>>> <[email protected]>
>>>>> wrote:
>>>>>>
>>>>>>
>>>>>> Hi Kiren
>>>>>>
>>>>>> Add one more jaxrs:server endpoint with a local transport address,
>>>>>> sharing the same JAX-RS bean with the HTTP-aware jaxrs:endpoint, and
>>>>>> then
>>>>>> inject a jaxrs:client or WebClient initialized with the local
>>>>>> transport
>>>>>> address into your JAX-WS server, example,
>>>>>>
>>>>>> <jaxrs:server address="/http">
>>>>>> <jaxrs:serviceBeans>
>>>>>> <ref bean="service"/>
>>>>>> </jaxrs:serviceBeans>
>>>>>> </jaxrs:server>
>>>>>>
>>>>>> <jaxrs:server address="local://rsservice"
>>>>>> transportId="http://cxf.apache.org/transports/local">
>>>>>> <jaxrs:serviceBeans>
>>>>>> <ref bean="service"/>
>>>>>> </jaxrs:serviceBeans>
>>>>>> </jaxrs:server>
>>>>>>
>>>>>> <jaxrs:client address="local://rsservice">
>>>>>> </jaxrs:client>
>>>>>>
>>>>>> and inject this client (or WebClient) into the soap server
>>>>>>
>>>>>> This should do
>>>>>>
>>>>>> Cheers, Sergey
>>>>>>
>>>>>>
>>>>>> On 13/11/13 23:10, Kiren Pillay wrote:
>>>>>>>
>>>>>>>
>>>>>>> Hi Sergey,
>>>>>>>
>>>>>>> I am trying to have a SOAP service calling a RESTFUL service, both
>>>>>>> deployed
>>>>>>> within the same CXF servlet.
>>>>>>>
>>>>>>> What is the best or most efficient way to invoke the RestFul service
>>>>>>> from
>>>>>>> the SOAP service?. I want the RestFul service to behave as if its
>>>>>>> being
>>>>>>> called from an external source so that the invokers etc are all
>>>>>>> called
>>>>>>> as
>>>>>>> normal.
>>>>>>>
>>>>>>> I'm trying the following call but it doesn't seem to be invoking the
>>>>>>> service. Both the SOAP and REST service are within the same Servlet
>>>>>>> Context.
>>>>>>>
>>>>>>> WebClient wc = WebClient.create(
>>>>>>>
>>>>>>> "
>>>>>>> http://localhost:8080/deploy-mms-billing/rest/function/mmsBilling",
>>>>>>> "test", "test", null);
>>>>>>>
>>>>>>> Regards
>>>>>>> Kiren
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Sergey Beryozkin
>>>>>>
>>>>>> Talend Community Coders
>>>>>> http://coders.talend.com/
>>>>>>
>>>>>> Blog: http://sberyozkin.blogspot.com
>>>>>
>>>>>
>>>>>
>>>>
>>>
>