我想为Apache CXF JAX-RS实现编写一个拦截器,它检查特定注释的目标服务/方法,并对该注释进行一些特殊处理.
我似乎无法在拦截器文档中找到描述如何执行此操作的任何内容.有没有人有任何想法?
谢谢!
如果拦截器在链中运行得相当晚(比如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)
那应该给你绑定的方法,这样你就可以获得声明的类或注释等...
啊。我没有指定我正在使用 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!
| 归档时间: |
|
| 查看次数: |
6045 次 |
| 最近记录: |