4

CXF に REST API を実装しました。私の目標は、POJO でカスタム アノテーションを定義し、それらがマーシャリングされる前に CXF インターセプターで処理できるようにすることです。インターセプターで実際のオブジェクトを取得することを除いて、これを行うために必要なすべての情報を持っていると思います。私のコードは次のようになります。

  1. リソース クラス

    @Path("/mypath")
    public class MyResource {
    
        @GET
        public MyObject getObject() {
           MyObject o = new MyObject();
           ...
           return o;
        }
    }
    
  2. MyObject

    public class MyObject {
    
        private String x;
    
        @MyAnnotation
        public String getX() {
           return x;
        }
    
        public String setX(x) {
           this.x = x;
        }
    }
    
  3. インターセプター

    public class MyInterceptor extends AbstractPhaseInterceptor<Message> {
    
        public VersionOutInterceptor() {
            super(Phase.POST_LOGICAL);
        }
    
        public final void handleMessage(Message message) {
            // 1. STUCK -- get object from the message
            // 2. parse annotations and manipulate the object
            // 3. put the object back on the message for serialization
        }
    }
    

メッセージからオブジェクトを取得し、注釈に基づいて操作し、メッセージに戻すにはどうすればよいですか?

4

1 に答える 1

9

私にも同様の要件があり、これが私がそれを行う方法です

In Interceptorの場合はPRE_INVOKEフェーズを使用し、OutInterceptorの場合はPRE_LOGICALフェーズを使用しました。このコードはロギングのみを示していますが、ユースケースで必要に応じてオブジェクトを変更できます。

以下のコードはあなたが探しているオブジェクトをフェッチします

@Override
   public void handleMessage(Message message) throws Fault {
      MessageContentsList objs = MessageContentsList.getContentsList(message);
      if (objs != null && objs.size() == 1) {
      Object responseObj = objs.get(0);
      DomainPOJO do= (DomainPOJO)responseObj;
   _logger.info(do.toString());
  }
}
于 2012-11-30T12:13:59.993 に答える