【问题标题】:How can I test a MessageBodyWriter for a List<Some>?如何测试 List<Some> 的 MessageBodyWriter?
【发布时间】:2015-01-26 13:30:49
【问题描述】:

我有一个 JAX-RS 资源方法。

@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Some> list() {

    final List<Some> list = get();

    // list and each elements are ok.

    return list;
}

问题是application/xml 生成 500 没有任何特定的服务器(tomcat)日志。

application/json 工作正常。

我为list 中的每个元素检查 JAXB-marshaller。

我该如何调试呢?如何为List&lt;Some&gt; 测试任何MessageBodyWriter

更新

这个问题的根本原因(500 没有错误日志)是错误的 JAXB 注释类。

我按照@peeskillet 的建议创建了一个ExceptionMapper&lt;Exception&gt;

@Provider
public class MyExceptionMapper implements ExceptionMapper<Exception> {
    @Override
    public Response toResponse(final Exception exception) {
        exception.printStackTrace(System.err);
        return Response.serverError().build();
    }
}

然后我可以看到 JAXB 犯了什么错误。我仍然不明白为什么没有报告任何 JAXB 错误。

【问题讨论】:

  • “我该如何调试这个?” - 尝试创建一个ExceptionMapper&lt;Exception&gt; 并从异常中打印堆栈跟踪。很难在没有看到 500 的原因的情况下进行调试。我很惊讶它还没有记录在某个地方。
  • @peeskillet 你应该写一个答案而不是评论,这样我才能接受它。
  • 第一次成功了吗?你能找到问题吗?
  • @peeskillet 请检查我的更新。

标签: jaxb jax-rs


【解决方案1】:

“我该如何调试这个?”

有时当没有记录错误/异常时,我会创建一个

ExceptionMapper<Throwable or Exception> 

然后打印堆栈跟踪。如果在 JAX-RS 上下文中抛出异常,它应该通过映射器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-15
    • 2022-11-10
    • 2020-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 2018-02-07
    相关资源
    最近更新 更多