Unfortunately no, I'm stuck in 2.6.0.  Are there any other options exposed for 
obtaining caller's IP address?  

Thank you again, your help is very much appreciated!


Thanks,
Zach


-----Original Message-----
From: Sergey Beryozkin [mailto:[email protected]] 
Sent: Tuesday, November 06, 2012 8:52 AM
To: [email protected]
Subject: Re: Obtain CXF Request?

On 06/11/12 14:40, Calvert, Zach (Zach)** CTR ** wrote:
> Thank you for your reply Sergey, unfortunately while the context is 
> populated, I get:
>
> java.lang.NullPointerException
>          at 
> org.apache.cxf.jaxrs.impl.tl.ThreadLocalHttpServletRequest.getRemoteAd
> dr(ThreadLocalHttpServletRequest.java:223)[119:org.apache.cxf.bundle:2
> .3.2]
> ...
>
> So I have a handle to the ThreadLocalHttpServletRequest, but the "get" 
> function isn't being populated.  I've walked the code and the NPE in 
> ThreadLocalHttpServletRequest at 223 corresponds to the function
>      public String getRemoteAddr() {
>          return get().getRemoteAddr();
>      }
>
> Get is exposed from AbstractThreadLocalProxy:
> public T get() {
>          return infos.get();
>      }
>
> Is there something I need to do to force my context to be populated?

I think HttpServletRequest has to be visible to CXF endpoints starting from 
Camel 2.10.2, as well the as the latest 2.9.x. Are you working with the older 
version ?

Cheers, Sergey

>
> Thank you again!
>
>
>
> Zach Calvert
>
>
> -----Original Message-----
> From: Sergey Beryozkin [mailto:[email protected]]
> Sent: Tuesday, November 06, 2012 8:13 AM
> To: [email protected]
> Subject: Re: Obtain CXF Request?
>
>
> Hi
> On 06/11/12 14:02, Calvert, Zach (Zach)** CTR ** wrote:
>> I am stuck using Camel CXF 2.6.0 (yes, I know I'm behind) and need to get 
>> the IP address of the remote system making an HTTP POST to my cxfbean:
>>           <!-- Define the camel route -->
>>           <camel:route id="restApis">
>>               <camel:from 
>> uri="jetty:{{protocol}}://0.0.0.0:{{port}}/rest/?matchOnUriPrefix=true&amp;handlers=securityHandler"/>
>>               <camel:to 
>> uri="cxfbean:restfulService?providers=#restExceptionMapper" />
>>               <camel:log message="done"/>
>>           </camel:route>
>>
>> My restfulService handles the posts.  When I turn on tracing, I see
>>
>> 07:10:29,783 | INFO  | qtp26579196-144  | Tracer                           | 
>> 76 - org.apache.camel.camel-core - 2.6.0 | 
>> ID-centora-45480-1352207331927-4-1>>>   (restApis) 
>> from(https://0.0.0.0:9091/rest/?matchOnUriPrefix=true&handlers=securityHandler)
>>  -->   restfulService<<<   Pattern:InOut, Headers:{Host=test.com:9091, 
>> CamelHttpMethod=POST, CamelHttpServletRequest=[POST 
>> /rest/domain/feed]@19570394 org.eclipse.jetty.server.Request@12a9eda, 
>> Accept-Encoding=gzip,deflate, CamelHttpServletResponse=HTTP/1.1 200
>>
>> In my bean I have the function
>>       @POST
>>       @Path("{domainName}/{domainChild}")
>>       @Consumes({MediaType.APPLICATION_RESTMS_XML, 
>> MediaType.APPLICATION_RESTMS_JSON, MediaType.APPLICATION_XML, 
>> MediaType.APPLICATION_JSON})
>>       @Produces({MediaType.APPLICATION_RESTMS_XML, 
>> MediaType.APPLICATION_RESTMS_JSON, MediaType.APPLICATION_XML, 
>> MediaType.APPLICATION_JSON})
>>       public Response post(@PathParam("domainName") String domainName,
>>               @PathParam("domainChild") String domainChildName,
>>               JAXBElement<RestXml>   restXml) { ...
>> }
>>
>> I have tried to add the parameter Exchange (camel), Exchange (cxf), Message, 
>> etc all to no avail due to no longer having a mapping for my sample test 
>> post.  I want to know if there is a way for me to access that header 
>> "CamelHttpServletRequest" inside of this bean's function?  My end goal is 
>> simply to get the HttpRequest or ServletRequest or whatever request that 
>> will have the "getRemoteAddress" function exposed on it.  I've been through 
>> the jaxrs core annotations and cannot seem to figure out how to get a handle 
>> to the original incoming request, or any context object that may contain the 
>> IP address of whoever is making the call to my servlet.  I thought maybe 
>> UriInfo or Request (from javax.ws.rs.core) contexts would have the info I'm 
>> looking for, but if they do, I can't figure them out.
>>
>> I have also looked at building a custom provider, but I can't figure out how 
>> to build one that not only gets the IP address, but manages to provide it 
>> along the route to my cxfbean.  Is there a way I can do something like get 
>> the IP and then set it as a QueryParam for my bean to consume?
>>
>> Any and all help would be greatly appreciated!
>>
>
> Injection "@Context HttpServletRequest" into the bean itself is one 
> option. Another one is to inject it into a RequestFilter provider and 
> update (CXF) Message.QUERY_STRING accordingly - this will let you add
> @QueryParam("remoteip") to the method signature
>
> HTH, Sergey
>
>>
>> Thanks,
>> Zach Calvert
>>
>
>
> --
> Sergey Beryozkin
>
> Talend Community Coders
> http://coders.talend.com/
>
> Blog: http://sberyozkin.blogspot.com

Reply via email to