我们在CXF中实现了一个REST API.我的目标是能够在POJO上定义自定义注释并在它们获得编组之前在CXF拦截器中处理它们.我相信除了检索拦截器中的实际对象之外,我还需要能够做到这一点的
>资源类
@Path("/mypath")
public class MyResource {
@GET
public MyObject getObject() {
MyObject o = new MyObject();
...
return o;
}
}
> MyObject
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
}
}
如何从消息中获取对象,根据注释对其进行操作,并将其放回消息中?
我有类似的要求,这就是我能做到的对于In Interceptor,我使用了PRE_INVOKE阶段和Out Interceptor 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());
}
}
