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&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
