【发布时间】: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<Some> 测试任何MessageBodyWriter?
更新
这个问题的根本原因(500 没有错误日志)是错误的 JAXB 注释类。
我按照@peeskillet 的建议创建了一个ExceptionMapper<Exception>。
@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<Exception>并从异常中打印堆栈跟踪。很难在没有看到 500 的原因的情况下进行调试。我很惊讶它还没有记录在某个地方。 -
@peeskillet 你应该写一个答案而不是评论,这样我才能接受它。
-
第一次成功了吗?你能找到问题吗?
-
@peeskillet 请检查我的更新。