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.