CXF REST:如何在截取程序中的消息被封送之前从消息中检索POJO对象;D

CXF REST:如何在截取程序中的消息被封送之前从消息中检索POJO对象;D,rest,cxf,message,interceptor,pojo,Rest,Cxf,Message,Interceptor,Pojo,我们已经在CXF中实现了RESTAPI。我的目标是能够在POJO上定义自定义注释,并在它们被封送之前在CXF拦截器中处理它们。我相信我有所有的信息,我需要能够做到这一点,除了检索拦截器中的实际对象。我的代码如下所示: 资源类 @Path("/mypath") public class MyResource { @GET public MyObject getObject() { MyObject o = new MyObject(); ...

我们已经在CXF中实现了RESTAPI。我的目标是能够在POJO上定义自定义注释,并在它们被封送之前在CXF拦截器中处理它们。我相信我有所有的信息,我需要能够做到这一点,除了检索拦截器中的实际对象。我的代码如下所示:

  • 资源类

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

    public class MyObject {
    
        private String x;
    
        @MyAnnotation
        public String getX() {
           return x;
        }
    
        public String setX(x) {
           this.x = x;
        }
    }
    
  • 拦截器

    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
        }
    }
    
    公共类MyInterceptor扩展了AbstractPhaseInterceptor{
    公共版本计算接收器(){
    超级(阶段后逻辑);
    }
    公共最终无效句柄消息(消息消息){
    //1.卡住--从消息中获取对象
    //2.解析注释并操作对象
    //3.将对象放回消息中进行序列化
    }
    }
    

  • 如何从消息中获取对象,根据注释对其进行操作,然后将其放回消息中?

    我有类似的要求,这就是我可以做到的

    对于In-Interceptor,我使用了PRE\u INVOKE阶段,对于Out-Interceptor,我使用了PRE\u 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());
      }
    }
    
    在这里喝一杯: