1

我很惊讶在谷歌上没有得到任何关于"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'它?

编辑: 作为实现期望的黑客,这就是我所做的:

我写了一个inInterceptorfor 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);
}

虽然,它给了我想要的结果,但它完全是一个 hack,看起来并不正确。任何意见?

4

1 回答 1

0

org.apache.cxf.resource.methodCXF 选择的用于处理传入请求的 Java 方法。这由 CXF 在 Pre-Stream 阶段自动完成,通常通过检查 jaxrs:serviceBeans 的类和方法上的注释,特别是 @Path、@[HTTPMethod]、@Produces、@Consumes 等注释。

如果您需要对 CXF 选择哪个方法进行更精细的控制,那么实现ResourceComparitor可能更合适,而不是实现一个拦截器来尝试从消息中解析这些数据。

于 2013-06-15T00:49:20.133 回答