Hi Willem,

Thats another good feature. But how do you set the Object[] varValues on
CxfConstants.CAMEL_CXF_RS_VAR_VALUES message header via spring xml?



 <from uri="cxfrs://bean://rsServer"/>
       <!-- We can remove this configure as the CXFRS producer is using the
HttpAPI by default -->
       <setHeader headerName="CamelCxfRsVarValues">
           ?
       </setHeader>
  <to uri="cxfrs://bean://rsClient"/>

Or do I still need to create a processor bean class to manually set this?

Regards,
Jejo



willem.jiang wrote:
> 
> Oh. my mistake.
> If you take a look at the CxfRsProducer.invokeProxyClient(Exchange 
> exchange), you will find you need to set 
> CxfConstants.CAMEL_CXF_RS_VAR_VALUES message header to set the varValues 
> if there are more than one resource class to create a right proxy.
> 
> Willem
> 
> jejmaster wrote:
>> 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-tp28186748p28202521.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to