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

Nic*_*cek 5 java cxf

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

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

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

Nic*_*cek 3

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

message.getExchange().put(Response.class, response);
Run Code Online (Sandbox Code Playgroud)

...那么实际的服务不会被调用,而其他阶段会被调用。还没有深入研究 CXF 代码来了解该逻辑在哪里发挥作用。

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

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

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