java - 使用 CXF 拦截器进行错误处理 - 更改响应消息

标签 java rest soap error-handling cxf

我正在尝试处理来自后端的错误。如果发生错误但内容是 XmlMessage 的实例,则调用 handleMessage()。我想将其更改为我自己的响应 - 只需设置响应代码并添加一些消息。

我还没有找到任何合适的文档可以告诉我如何做到这一点......

这些轴示例用于 REST,但我也想在 SOAP 中管理它。

拦截器

public class ErrorHandlerInterceptor extends AbstractPhaseInterceptor<Message> {

    public ErrorHandlerInterceptor() {
        super(Phase.POST_LOGICAL);
    }

    @Override
    public void handleMessage(Message message) throws Fault {
        Response response = Response
            .status(Response.Status.BAD_REQUEST)
            .entity("HOW TO GET A MESSAGE FROM AN EXCEPTION IN HERE???")
            .build();
        message.getExchange().put(Response.class, response);
    }

}

context.xml

<bean id="errorHandlerInterceptor"
    class="cz.cvut.fit.wst.server.interceptor.ErrorHandlerInterceptor" />

<jaxrs:server address="/rest/">
    <jaxrs:serviceBeans>
        <ref bean="restService" />
    </jaxrs:serviceBeans>
    <jaxrs:outFaultInterceptors>
        <ref bean="errorHandlerInterceptor" />
    </jaxrs:outFaultInterceptors>
</jaxrs:server>

最佳答案

如果您使用的是 JAX-RS,为什么不设置一个异常映射器,然后使用该映射器来处理响应。

一个简单的例子:

@Provider
@Produces(MediaType.APPLICATION_JSON)
public class MyExceptionMapper implements
        ExceptionMapper<MyException> {

    @Override
    public Response toResponse(MyException e) {
        return Response.status(Status.NOT_FOUND).build();
    }

}

然后您需要通过添加以下内容在 jaxrs 服务中注册提供者:

<jaxrs:providers>
    <bean class="com.blah.blah.blah.blah.MyExceptionMapper"/>  
</jaxrs:providers>

在上下文中的服务器配置中。这样你就可以完全访问异常,并可以从中得到任何你想要的东西。

关于java - 使用 CXF 拦截器进行错误处理 - 更改响应消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10064191/

相关文章:

java - 无法删除 Java Card 小程序

java - 无法预实例化名为 org.sakaiproject.accountvalidator.dao.impl.ValidationLogicDaoTarget 的单例

java - 如何从Rest Client的响应对象中获取url对象

json - 什么是 odata、json 和 soap?

soap - 在一次 'syncFolderItems' 操作中监控多个文件夹?

Java Map computeIfAbsent 问题

mysql - 如何使用带有双向实体的 RestFul Web 服务正确编写 Json?

javascript - 是否可以从 SOAPUI 中的脚本编辑器更改 REST API 中的查询参数?

c# - Objective-C/iPhone 中的公钥加密

java - 为什么我会收到此错误(未知标记 < :color> )even when there's no such tag in the file?