1

について Google で何も情報を得られなかったことに驚きました"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を書き、 inと inPhase.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);
}

それは私に望ましい結果をもたらしますが、それは完全にハックであり、実際には正しく見えません。コメントはありますか?

4

1 に答える 1

0

org.apache.cxf.resource.method着信要求を処理するために CXF によって選択された Java メソッド。これは、通常、jaxrs:serviceBeans のクラスとメソッドに存在するアノテーション、特に @Path、@[HTTPMethod]、@Produces、@Consumes などのアノテーションを調べることによって、Pre-Stream フェーズで CXF によって自動的に行われます。

CXF によってどのメソッドが選択されているかをより細かく制御する必要がある場合は、メッセージからこのデータを解析しようとするインターセプターを実装するよりも、 ResourceComparitorを実装する方が適切な場合があります。

于 2013-06-15T00:49:20.133 に答える