I see. That's great. So you mean the serviceClass parameter is optional when
configuring cxf? How do you expose the service without specifying the
serviceClass ? Isn't it required configuring at least the cxf:rsServer?

<cxf:rsServer id="restRouter" address="/restRouter/"
serviceClass="com.project.service.impl.ServiceManagerImpl" />

<cxf:rsClient id="restEndpoint"
address="http://localhost:8080/services/rest";
serviceClass="com.project.service.impl.ServiceManagerImpl" />

<route>
     <from uri="cxfrs:bean:restRouter"/>
     <to uri="cxfrs:bean:restEndpoint"/>
</route> 


Jejo


willem.jiang wrote:
> 
> It's hard to create the Proxy without specify the ResourceClass.
> HttpClient API is more friendly, as you don't need to specify the 
> ResourceClass when creating the client.
> 
> Willem
> 
> jejmaster wrote:
>> Hi Willem,
>> 
>> Its working enough in 2.3-SNAPSHOT. but we decided to use 2.2 as of the
>> moment until 2.3 gets released. 
>> 
>> Do you recommend on the httpclient rather than the proxyClient? 
>> 
>> Jejo
>> 
>> 
>> 
>> willem.jiang wrote:
>>> Hi Jejo
>>>
>>> Please feel free to log a JIRA for it, doesn't the HttpClient work good 
>>> for you ?
>>>
>>> Willem
>>>
>>> jejmaster wrote:
>>>> I found out that JAXRS Client only sends 1 parameter. So i will just
>>>> have
>>>> to
>>>> configure my service class to only accept 1 parameter instead of two.
>>>> Ill
>>>> just wrap it in a transfer object. 
>>>>
>>>> Anyway, maybe as a enhancement to camel-cxf jaxrs, hopefully we can
>>>> also
>>>> use
>>>> and support different rest clients such as Httpclient and URLStream so
>>>> form
>>>> parameters can also be allowed. 
>>>>
>>>> Regards,
>>>> Jejo 
>>>>
>>>>
>>>>
>>>> jejmaster wrote:
>>>>> Hi Willem,
>>>>>
>>>>> I just used the TestProcessor to see the value of the
>>>>> inMessage.getBody()
>>>>> because even if there's no processor, the parameters really gets null
>>>>> when
>>>>> routed.
>>>>>
>>>>> I am digging the code right now at CxfRSProducer. And it seems that
>>>>> the
>>>>> problem is in the Reflection part in the method invokeProxyClient. 
>>>>>
>>>>> Object response = method.invoke(target, parameters);
>>>>>
>>>>> i have logged the parameters before this part and the values were
>>>>> still
>>>>> in
>>>>> there. 
>>>>>
>>>>> I have also tried updating how JAXRSClientFactoryBean (cfb) is used as
>>>>> a
>>>>> jaxrs client. 
>>>>>
>>>>> Example:
>>>>>
>>>>> BindingFactoryManager manager =
>>>>> cfb.getBus().getExtension(BindingFactoryManager.class);
>>>>> JAXRSBindingFactory factory = new JAXRSBindingFactory();
>>>>> factory.setBus(cfb.getBus());
>>>>> manager.registerBindingFactory(JAXRSBindingFactory.JAXRS_BINDING_ID,
>>>>> factory);
>>>>> Object targetClass = cfb.create(sfb.getResourceClasses().get(0));
>>>>>
>>>>> Object response = method.invoke(targetClass , parameters);
>>>>>
>>>>>
>>>>> Still, the parameters, gets null after this method.invoke(..)
>>>>> reflection. 
>>>>>
>>>>>
>>>>> Im still digging on it and checking if i could replicate the
>>>>> reflection
>>>>> part. Can you also analyze/replicate it?
>>>>>
>>>>> Thanks.
>>>>>
>>>>>
>>>>>
>>>>> willem.jiang wrote:
>>>>>> Hi,
>>>>>>
>>>>>> Can I see the code that you do in the testProcessor?
>>>>>> If you don't set the exchange.outMessage(), you should get the right 
>>>>>> parameter from the inMessage body.
>>>>>>
>>>>>> Willem
>>>>>>
>>>>>>
>>>>>> jejmaster wrote:
>>>>>>> Hello,
>>>>>>>
>>>>>>> I am using the Camel 2.3-SNAPSHOT and implementing the CXFRS routing
>>>>>>> through
>>>>>>> ProxyClient. I have setup my JAXRS Service Class method to accept 2
>>>>>>> parameters, a String and an Object. The service is working fine when
>>>>>>> i
>>>>>>> am
>>>>>>> invoking it directly but when i am using the cxfrs camel routing, 
>>>>>>> these
>>>>>>> 2
>>>>>>> parameters are having null values. Anyway here's my setup:
>>>>>>>
>>>>>>> My Service/Resource Class:
>>>>>>>
>>>>>>> @Path("/myservice")
>>>>>>> Class MyService{
>>>>>>>
>>>>>>>    @POST
>>>>>>>    @Path("/myMethod")
>>>>>>>    public ModelCollectionTO getPatients(@FormParam("loc") String
>>>>>>> location,
>>>>>>> @FormParam("") ModelTO modelTO){
>>>>>>>              log.debug(location);
>>>>>>>              log.debug(modelTO);
>>>>>>>              ....
>>>>>>>     }
>>>>>>> }
>>>>>>>
>>>>>>> Router Definition:
>>>>>>>
>>>>>>> <route>
>>>>>>>         <from uri="cxfrs:bean:serviceRouter" />
>>>>>>>              <process ref="testProcessor" />
>>>>>>>         <to uri="cxfrs:bean:serviceEndpoint?httpClientAPI=false" />
>>>>>>> </route>
>>>>>>>
>>>>>>> I tried to use a test processor to capture the exchange and the
>>>>>>> inMessage.
>>>>>>> The 2 parameters are correct. with values:
>>>>>>>
>>>>>>> location: "String";
>>>>>>> ModelTO: firstName="FirstName", lastName="LastName"
>>>>>>>
>>>>>>> But after it routes through the endpoint, the 2 parameters are
>>>>>>> getting
>>>>>>> null
>>>>>>> values:
>>>>>>>
>>>>>>> location: null;
>>>>>>> ModelTO: firstname=null, lastName=null.
>>>>>>>
>>>>>>>
>>>>>>> I have checked the camel-cxf code and enabled the Trace logging. I
>>>>>>> might
>>>>>>> need additional logs in the invokeProxyClient method of the
>>>>>>> CxfRsProducer to
>>>>>>> see where the inMessage.getBody() values gets converted or loss
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>
>>>
>> 
> 
> 
> 

-- 
View this message in context: 
http://old.nabble.com/Null-parameters-when-routing-CXFRS-endpoints-tp28186748p28191256.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to