Ok, I finally was able to inject the mock HttpServletRequest/Response
via a custom invoker (on the server-side) - thanks for all the help!
Now looking at the Jackson issue...

On Wed, Jul 15, 2015 at 10:14 AM, Sergey Beryozkin <[email protected]> wrote:
> You do not need this interceptor on the client side, pass 'null' where
> context params are expected, and register it on the server side with the
> server factory bean if you need to test the server code interacting with the
> servlet request/response
>
> Sergey
> On 15/07/15 17:07, Chris Wolf wrote:
>>
>> Sergey,
>>
>> I changed the phase to UNMARSHAL.  But it seems to build and call the
>> chain *after* the resource method is invoked.  (I need to created the
>> mock req/res before the resource method is called).
>>
>> 10:01:29.301 [default-workqueue-2] DEBUG
>> o.a.cxf.phase.PhaseInterceptorChain - Adding interceptor
>> org.apache.cxf.ws.policy.PolicyInInterceptor@87a40424 to phase receive
>> 10:01:29.301 [default-workqueue-2] DEBUG
>> o.a.cxf.phase.PhaseInterceptorChain - Adding interceptor
>>
>> org.apache.cxf.jaxrs.client.WebClient$ClientAsyncResponseInterceptor@bb171679
>> to phase unmarshal
>> 10:01:29.301 [default-workqueue-2] DEBUG
>> o.a.cxf.phase.PhaseInterceptorChain - Adding interceptor
>> CXF_Test.cxf_test.FakeHttpRequestResponseInjectingInterceptor@64e43406
>> to phase unmarshal
>> 10:01:29.303 [default-workqueue-2] DEBUG
>> o.a.cxf.phase.PhaseInterceptorChain - Adding interceptor
>> org.apache.cxf.jaxrs.client.spec.ClientResponseFilterInterceptor@6eec47c4
>> to phase pre-protocol-frontend
>> 10:01:29.303 [default-workqueue-2] DEBUG
>> o.a.cxf.phase.PhaseInterceptorChain - Chain
>> org.apache.cxf.phase.PhaseInterceptorChain@7329779f was created.
>> Current flow:
>>    receive [PolicyInInterceptor]
>>    pre-protocol-frontend [ClientResponseFilterInterceptor]
>>    unmarshal [ClientAsyncResponseInterceptor,
>> FakeHttpRequestResponseInjectingInterceptor]
>>
>> 10:01:29.303 [default-workqueue-2] DEBUG
>> o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on
>> interceptor org.apache.cxf.ws.policy.PolicyInInterceptor@87a40424
>> 10:01:29.304 [default-workqueue-2] DEBUG
>> o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on
>> interceptor
>> org.apache.cxf.jaxrs.client.spec.ClientResponseFilterInterceptor@6eec47c4
>> 10:01:29.304 [default-workqueue-2] DEBUG
>> o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on
>> interceptor
>> org.apache.cxf.jaxrs.client.WebClient$ClientAsyncResponseInterceptor@bb171679
>> 10:01:29.304 [default-workqueue-2] DEBUG
>> o.a.cxf.phase.PhaseInterceptorChain - Invoking handleMessage on
>> interceptor
>> CXF_Test.cxf_test.FakeHttpRequestResponseInjectingInterceptor@64e43406
>> 10:01:29.304 [default-workqueue-2] DEBUG
>> C.c.FakeHttpRequestResponseInjectingInterceptor - ***************
>> Called handleMessage()...
>>
>>
>>
>> I assume this interceptor is on the client-side's InInterceptor chain,
>> maybe I'm wrong...
>>
>>
>> On Wed, Jul 15, 2015 at 3:35 AM, Sergey Beryozkin <[email protected]>
>> wrote:
>>>
>>>
>>> On 15/07/15 03:20, Chris Wolf wrote:
>>>>
>>>>
>>>> For legacy reasons, all of the resource methods in the project I'm
>>>> working on have a signature similar to:
>>>>
>>>>       @GET
>>>>       @Path("/book")
>>>>       public Response getBook(@Context HttpServletRequest request,
>>>>               @Context HttpServletResponse response);
>>>>
>>>>
>>>> When I change to local transport (to save runtime setup of Jetty in
>>>> unit tests), these parameters are null, which makes sense since the
>>>> protocol is not HTTP.  I tried implementing a custom Interceptor to
>>>> replace Message content with a two element list containing mock
>>>> HttpServletRequest and HttpServletResponse , but I couldn't find the
>>>> correct phase.
>>>
>>>
>>>
>>> JAXRSInInterceptor runs at the UNMARSHAL phase, so you can register an
>>> interceptor at UMMARSHAL or earlier, and set the mocks as message
>>> properties, example:
>>> message.put("HTTP.REQUEST", request);
>>> message.put("HTTP.RESPONSE", response);
>>>
>>>>
>>>> (the mocks are from mockrunner-servlet)
>>>>
>>>> Now I'm thinking it might be easier with a custom invoker, as
>>>> mentioned at the bottom of this page:
>>>>
>>>> http://cxf.apache.org/docs/jax-rs-filters.html
>>>>
>>>> I downloaded the source tarball and found the source at:
>>>>
>>>>
>>>>
>>>> https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/CustomJAXRSInvoker.java;h=cce0f048d1c9f1b12925725b9def7730a4aa01ff;hb=HEAD
>>>>
>>>> ...but now I can't find any other java module that would show how to
>>>> configure this custom invoker.  Apologies if I missed it online, but
>>>> could find nothing.
>>>>
>>> This documentation shows how to set it up from Spring only:
>>>
>>> http://cxf.apache.org/docs/jax-rs-filters.html#JAX-RSFilters-Custominvokers
>>>
>>> or do from the code:
>>> myServerfactoryBean.setInvoker(myInvoker)
>>>
>>> Cheers, Sergey
>>>
>>>> Thanks,
>>>>
>>>> Chris
>>>>
>>>
>>>
>>> --
>>> Sergey Beryozkin
>>>
>>> Talend Community Coders
>>> http://coders.talend.com/
>>>
>>> Blog: http://sberyozkin.blogspot.com
>
>
>
> --
> Sergey Beryozkin
>
> Talend Community Coders
> http://coders.talend.com/
>
> Blog: http://sberyozkin.blogspot.com

Reply via email to