After a detail look in the source code, the issue lies in the Camel
CxfRsInvoker level. It's no so much of an "issue", but more of a concept
discussion.

In an ordinary JAX-RS application, the Subresource Locator would use any
path parameters, query params, etc. when building the resource to return.
So these parameters are "volatile" and only relevant at that layer. They
would "perpetuate" as instance variables of the new Resource, probably.

However, with Camel, the user's logic typically executes at the end of the
resource chain, when the final resource is hit. So as a Camel user, I would
expect to find all @PathParams, @HeaderParams, @QueryParams, etc. found
along the way compiled and injected as headers in my IN message (or in a
MessageContentsList body).

But that doesn't happen. The Camel CxfRsInvoker does indeed invoke the
Subresource locators (line 52 in 2.10.3), but to cling to the param values
one would have to write a method body (to "perpetuate" them in some way),
which is contradictory to the philosophy of camel-cxfrs. The component page
states: "This class is used to configure the JAXRS properties ONLY. The
methods will NOT be executed during the routing of messages to the
endpoint, the route itself is responsible for ALL processing instead.".
(this is actually inaccurate, because Subresource methods are truly
executed).

Anyway, for my use case I will create a custom binding to process
all org.apache.cxf.jaxrs.model.OperationResourceInfoStack in the CXF
Exchange, to extract all params and place them as IN message headers. I may
commit it sooner or later just in case someone else finds it useful ;)

Regards,

*Raúl Kripalani*
Apache Camel Committer
Enterprise Architect, Program Manager, Open Source Integration specialist
http://about.me/raulkripalani | http://www.linkedin.com/in/raulkripalani
http://blog.raulkr.net | twitter: @raulvk <http://twitter.com/raulvk>

On Thu, Dec 27, 2012 at 10:45 AM, Sergey Beryozkin <sberyoz...@gmail.com>wrote:

> On 27/12/12 10:25, Raul Kripalani wrote:
>
>> Hi Willem,
>>
>> Thanks for the quick response. Is there an interceptor we can implement to
>> capture intermediate method invocations?
>> I found CXF-2709, which is somewhat related. Basically, I'm interested in
>> exploring all Methods and Param Arrays along the path to the final
>> resource.
>>
>> Right now, if there was a query or path parameter along the way, it
>> doesn't
>> appear in the ultimate MessageContentsList.
>>
>>
> If the final resource method, be it part of the sub-resource or root
> resource, has the parameters annotated as Path or Query parameters, then
> the final list of parameters should be complete,
>
>
>  If you want we can switch this conversation to the CXF User forum. I
>> didn't
>> want to cross-post.
>>
>>  Perhaps it's better be discussed at the CXF list indeed, but I wonder,
> may be I'm misunderstanding the issue :-), and may be the issue belongs at
> the Camel CXFRsInvoker level ? Can you please prototype some example root &
> sub resource code - can quickly confirm if it's a CXF level issue or not
>
> Cheers, Sergey
>
>
>  Regards,
>>
>> *Raúl Kripalani*
>> Apache Camel Committer
>> Enterprise Architect, Program Manager, Open Source Integration specialist
>> http://about.me/raulkripalani | http://www.linkedin.com/in/**
>> raulkripalani <http://www.linkedin.com/in/raulkripalani>
>> http://blog.raulkr.net | twitter: 
>> @raulvk<http://twitter.com/**raulvk<http://twitter.com/raulvk>
>> >
>>
>> On Thu, Dec 27, 2012 at 10:19 AM, Willem jiang<willem.ji...@gmail.com>**
>> wrote:
>>
>>  Hi Raul
>>>
>>> The cxfrs component only hit the final resource. As camel don't know what
>>> to do sub resource.
>>> You can find the code in the performInvocation method of the
>>> CxfRsInvoker.
>>>
>>>
>>> --
>>> Willem Jiang
>>>
>>> Red Hat, Inc.
>>> FuseSource is now part of Red Hat
>>> Web: http://www.fusesource.com | http://www.redhat.com
>>> Blog: http://willemjiang.blogspot.**com<http://willemjiang.blogspot.com>(
>>> http://willemjiang.blogspot.**com/ <http://willemjiang.blogspot.com/>)
>>> (English)
>>>            http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese)
>>> Twitter: willemjiang
>>> Weibo: 姜宁willem
>>>
>>>
>>>
>>>
>>>
>>> On Thursday, December 27, 2012 at 6:08 PM, Raul Kripalani wrote:
>>>
>>>  Hi all,
>>>>
>>>> I have a quick question about the CXF-RS consumers. How are Subresources
>>>> and Resource Locators handled?
>>>>
>>>> Does the CXF Binding get invoked each time per Subresource? Or only when
>>>> the final resource is hit? If the latter happens, we may have lost a lot
>>>>
>>> of
>>>
>>>> context, as we never got the chance to process the params, methods, etc.
>>>> along the path, only the last ones.
>>>>
>>>> I imagine this question could belong in the CXF forum. After all, I
>>>> guess
>>>> it boils down to: when does CXF invoke the Custom Invoker? But maybe
>>>> someone can help...
>>>>
>>>> Regards,
>>>>
>>>> *Raúl Kripalani*
>>>> Apache Camel Committer
>>>> Enterprise Architect, Program Manager, Open Source Integration
>>>> specialist
>>>> http://about.me/raulkripalani | http://www.linkedin.com/in/**
>>>> raulkripalani <http://www.linkedin.com/in/raulkripalani>
>>>> http://blog.raulkr.net | twitter: 
>>>> @raulvk<http://twitter.com/**raulvk<http://twitter.com/raulvk>
>>>> >
>>>>
>>>
>>>
>>>
>>>
>>>
>>
>

Reply via email to