Apache CXF:如何从拦截器返回失败响应

时间:2011-01-31 19:42:12

标签: java cxf

我编写了一个自定义拦截器来进行一些参数验证。我希望能够返回错误代码并将带有JAXB注释的类序列化为响应主体。

如果我抛出一个WebApplicationException,它没有做任何特殊处理来序列化内部的Response对象(这是有意义的;我认为这是由另一个拦截器完成的。)

我应该如何停止拦截器链但是仍然有JAXB序列化响应实体?

1 个答案:

答案 0 :(得分:3)

好吧,至少在CXF JAX-RS拦截器流程中,如果设置:

message.getExchange().put(Response.class, response);

...然后实际服务不会被调用,而其他阶段会被调用。没有深入研究CXF代码,看看这个逻辑在哪里发挥作用。

所以我建立了这样的回复:

Response response = Response
    .status(Response.Status.FORBIDDEN)
    .entity(new ErrorEntity("This is a JAXB object with an error string"))
    .build();

我还在CXF JAX-RS过滤器中运行了一些自定义身份验证,我只想在身份验证正常时检查参数,因此我将参数拦截器类设置为在PRE_INVOKE阶段运行。 / p>