从CXF Interceptor确定目标服务/方法

Nic*_*cek 5 java cxf

我想为Apache CXF JAX-RS实现编写一个拦截器,它检查特定注释的目标服务/方法,并对该注释进行一些特殊处理.

我似乎无法在拦截器文档中找到描述如何执行此操作的任何内容.有没有人有任何想法?

谢谢!

Dan*_*ulp 9

如果拦截器在链中运行得相当晚(比如USER_LOGICAL阶段),你应该可以做类似的事情:


Exchange exchange = msg.getExchange();
BindingOperationInfo bop = exchange.get(BindingOperationInfo.class);
MethodDispatcher md = (MethodDispatcher) 
                exchange.get(Service.class).get(MethodDispatcher.class.getName());
Method meth = md.getMethod(bop);
Run Code Online (Sandbox Code Playgroud)

那应该给你绑定的方法,这样你就可以获得声明的类或注释等...


Nic*_*cek 5

啊。我没有指定我正在使用 CXF 的 JAX-RS 部分;不确定这是否会影响丹尼尔·库尔普的答案,但他的解决方案实际上对我不起作用。我相信这是因为 CXF 在处理 JAX-RS 时的做法有所不同。

我发现了 CXF 的源代码[JAXRSInInterceptor][1],并在代码中看到该拦截器将方法信息放入对象中,Exchange如下所示:

message.getExchange().put(OperationResourceInfo.class, ori);

...在该UNMARSHAL阶段期间,根据CXF 拦截器文档,该阶段发生在该*_LOGICAL阶段之前。因此,通过编写一个Interceptor处理该USER_LOGICAL阶段的方法,我可以这样做:

message.getExchange().get(OperationResourceInfo.class)

...访问那里并Method处理Class<?>呼叫Service