【问题标题】:CXF REST: How can I retrieve the POJO object from the message in an interceptor before it gets marshal'd?CXF REST:如何在拦截器中的消息中检索 POJO 对象,然后再将其编组?
【发布时间】:2012-07-22 03:59:40
【问题描述】:

我们已经在 CXF 中实现了一个 REST API。我的目标是能够在 POJO 上定义自定义注释,并在它们被编组之前在 CXF 拦截器中处理它们。我相信除了在拦截器中检索实际对象之外,我拥有执行此操作所需的所有信息。我的代码如下所示:

  1. 资源类

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

    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
        }
    }
    

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

【问题讨论】:

标签: rest cxf message interceptor pojo


【解决方案1】:

我有类似的要求,我可以这样做

对于 In Interceptor,我使用了 PRE_INVOKE Phase 和 Out Interceptor PRE_LOGICAL Phase。 此代码仅显示日志记录,但您可以根据 Usecase 需要更改对象。

以下代码将获取您正在寻找的对象

@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());
  }
}

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-02
    相关资源
    最近更新 更多