我很惊讶没有在谷歌上得到任何关于"org.apache.cxf.resource.method"的信息。尽管如此,有很多拦截器使用它(在我得到的代码中)。
例如,(在自定义FaultOutInterceptor中):
private boolean isServiceResponseRequested(Message message) {
Method method = (Method) message.getExchange().getInMessage()
.get("org.apache.cxf.resource.method");
if (method != null) {
Class c = method.getReturnType();
if (c != null) {
if (c.getSimpleName().equals(
ServiceResponse.class.getSimpleName())) {
return true;
}
}
}
return false;
}AbstractAuthorizingInInterceptor也有对它的引用。
有谁介意解释一下"org.apache.cxf.resource.method“的意义,以及如何在哪里'set‘它?
编辑:作为一个黑客来实现所需的目标,这就是我所做的:
我为Phase.PRE_STREAM编写了一个Phase.PRE_STREAM,在jaxrs:inInterceptors和
handleMessage(Message message)
{
Message inMessage = message.getExchange().getInMessage();
Method appMethod = //Logic to determine the method based on the request Url
inMessage.put("org.apache.cxf.resource.method", appMethod);
}虽然,它给了我想要的结果,它完全是一个黑客,看起来并不是真的正确。有什么评论吗?
发布于 2013-06-15 00:49:20
CXF选择的org.apache.cxf.resource.method Java方法来处理传入的请求。这是由CXF在流前阶段自动完成的,通常通过检查jaxrs的类和方法上的注释来完成:serviceBeans,特别是@Path、@HTTPMethod、@Produces、@消耗品等等。
如果您需要对CXF选择哪种方法进行更精确的优化控制,则可能更适合实现ResourceComparitor,而不是实现拦截器来尝试将这些数据解析出消息。
https://stackoverflow.com/questions/14712705
复制相似问题