Thank you Andy!

Regards!

On Tue, Mar 5, 2019, 1:47 PM Andy McCright <[email protected]>
wrote:

> Hi Pablo,
>
> If you use the MicroProfile Rest Client 1.2 APIs and CXF 3.3, there are
> some new features that will make this scenario a little simpler.
>
> First, you can now get the java.lang.reflect.Method of the client interface
> being invoked using a ClientRequestFilter - there is an example from the
> TCK here:
>
> https://github.com/eclipse/microprofile-rest-client/blob/ffdddfe345fe88f30b4bc58ffcb55896a6edc309/tck/src/main/java/org/eclipse/microprofile/rest/client/tck/providers/InvokedMethodRequestFilter.java#L34
>
> Creating and/or propagating headers is also simplified.  You can read more
> details here:
>
> https://download.eclipse.org/microprofile/microprofile-rest-client-1.2.1/microprofile-rest-client-1.2.1.html#_specifying_additional_client_headers
>
> The basic idea is that you can specify the headers as annotations (or
> create a ClientHeadersFactory implementation) - one thing you could try
> would be:
>
> @Path("/JNAP/")
> @Consumes({ "application/json" })
> @Produces({ "application/json" })
> @ClientHeaderParam(name="X-JNAP-Authorization" value="{computeAuthHeader}")
> // compute Auth header for all methods in interface
> public interface JNAPClient {
>
>     default String computeAuthHeader() {
>         return SomeUtil.getAuthorizationHeader();
>     }
>
>     @POST
>     @Path("")
>     @ClientHeaderParam(name= "X-JNAP-Action", value="router/GetWANStatus3")
>     public WanStatus3 getWanStatus3();
>
>     @POST
>     @Path("")
>     @ClientHeaderParam(name= "X-JNAP-Action", value="router/blah")
>     @JNAPAuthorization
>     public BlahResponse doBlah();
>
>
> Hope this helps,
>
> Andy
>
> On Tue, Mar 5, 2019 at 5:59 AM James Carman <[email protected]>
> wrote:
>
> > Those may not work on the client side.  If that’s the case, I’d scrap
> using
> > client proxies and I’d just use the JAX-RS client api directly, unless
> > you’re using this as a tinkering opportunity.
> >
> > On Tue, Mar 5, 2019 at 6:46 AM James Carman <[email protected]>
> > wrote:
> >
> > > Did you try using @HeaderParam and @DefaultValue?
> > > On Tue, Mar 5, 2019 at 1:40 AM Pablo Caballero <[email protected]>
> > wrote:
> > >
> > >> Hi folks!
> > >>
> > >> I'm writing a REST client to interact with a service exposed by my
> home
> > >> router (*1).
> > >>
> > >> The service consist of a set of operations exposed in a unique URI (
> > >> https://xxx.xxx.xxx.xxx/JNAP/). The operation being called depends on
> > the
> > >> value of a special http header (X-JNAP-Action). Some operations
> require
> > >> authentication and some don't (authentication works as http basic auth
> > but
> > >> using a custom header called X-JNAP-Authorization). You can read about
> > >> this
> > >> API in https://github.com/reujab/linksys.
> > >>
> > >> My idea is to use two custom annotations to:
> > >> - map the interface method to the correlated X-JNAP-Action value
> > >> - mark operations that need authentication
> > >>
> > >> and use an/two interceptor/interceptors to implement the logic.
> > >>
> > >> Something like this:
> > >>
> > >> @Path("/JNAP/")
> > >> @Consumes({ "application/json" })
> > >> @Produces({ "application/json" })
> > >> public interface JNAPClient {
> > >>
> > >>     @POST
> > >>     @Path("")
> > >>     @JNAPAction(value="router/GetWANStatus3")
> > >>     @JNAPAuthorization
> > >>     public WanStatus3 getWanStatus3();
> > >>
> > >>     @POST
> > >>     @Path("")
> > >>     @JNAPAction(value="router/blah")
> > >>     @JNAPAuthorization
> > >>     public BlahResponse doBlah();
> > >>
> > >> and so on...
> > >>
> > >> I read about using
> > message.getExchange().get(OperationResourceInfo.class)
> > >> (*2) to get access to the target method inside an interceptor and I
> > wrote
> > >> a
> > >> bit of code to test it but I couldn't make it work (I get a null value
> > as
> > >> a
> > >> result of calling message.getExchange()... ). So, I decided to take a
> > >> deeper look at the Message parameter inspecting its value and I
> figured
> > >> out
> > >> that there was a OperationResourceInfo element in the MessageImpl's
> > >> "contents" member. At this point I'm wondering if it's ok to cast the
> > >> "message" parameter to MessageImpl and use the getContent method to
> > access
> > >> the ori's info or if should find another solution.
> > >>
> > >> Thank you very much!
> > >>
> > >> Best regards
> > >>
> > >> (*1) https://www.linksys.com/us/p/P-EA9300/
> > >> (*2)
> > >>
> > >>
> >
> https://stackoverflow.com/questions/4219093/determine-target-service-method-from-cxf-interceptor
> > >>
> > >
> >
>

Reply via email to