3

我创建了一个自定义异常,并且我有一个异常映射器,我希望在抛出异常时调用它,以便我可以返回正确的 http 返回代码和消息,但由于某种原因,它不适用于我的异常。

这是相关代码

我的例外类:

public class MyException extends ApplicationRuntimeException
{

    private static final long serialVersionUID = 1L;

    public MyException ()
    {
        super();
    }

    public MyException (String message)
    {
        super(message);
    }

    public MyException (String message, ErrorCode errorCode)
    {
        super(message, errorCode);
    }

    public MyException (Throwable t)
    {   
        super(t);
    }

    public MyException (String message, Throwable t)
    {
        super(message, t);
    }

}

我的异常映射器类

@Provider
public class MyExceptionMapper implements ExceptionMapper<Exception>
{
    @Override
    public Response toResponse(Exception exception)
    {
        //code
        return response;
    }
}

CXF 配置

<jaxrs:server id="serviceId" address="/">
        <jaxrs:providers>
            <bean class="com.package.MyExceptionMapper"/>
        </jaxrs:providers>
</jaxrs:server>

这基本上就是我的代码的样子,我是否遗漏了什么或我需要提供任何其他信息才能解决此问题?

异常和异常映射器位于两个不同的项目中,但我认为这并不重要,因为它们都在类路径中。

谢谢

4

2 回答 2

5

如果这是您的完整 CXF,则您缺少正在执行的此服务器中的服务 bean。

提供者与服务绑定,并且只会为同样在服务器中定义的服务 bean 执行。

除此之外,一切看起来都很好,所以我会检查并确保你的异常真的被抛出了。

于 2013-04-25T14:57:52.430 回答
0

异常映射器只处理服务 bean 抛出的异常。

在这种情况下,一种选择是抛出一个新的 WebApplicationException(Throwable, Response) ,其中响应的构建方式应与异常映射器中所做的相同。

如果您尝试进行一些验证,我认为创建自定义消息正文阅读器是一个不错的选择。通过这样做,在消息正文阅读器中,您还可以访问其他提供程序/异常映射器。

祝你好运!

于 2013-10-19T20:37:30.923 回答