【问题标题】:troubleshooting JAXBUnmarshalException: Unexpected end of stream (RESTeasy)JAXBUnmarshalException 故障排除:流意外结束 (RESTeasy)
【发布时间】:2013-07-27 06:58:08
【问题描述】:

如果有人可以帮助我制定解决以下错误的策略,我将不胜感激,该错误以不可辨别的模式发生;大多数时候没有错误,大约 90% 的时候我是成功的:

ERROR [org.jboss.resteasy.core.SynchronousDispatcher]  Failed executing POST /toys/customer25/insert
org.jboss.resteasy.plugins.providers.jaxb.JAXBUnmarshalException: Unexpected end of stream

我如何将这个错误简单地记录到控制台?我想捕获此方法正在接收的 JSON 并找出导致此错误的原因。我将能够在服务器日志中看到它。

我正在做的是以 JSON 格式将一组 Toy 对象发布到服务器。也就是说,在客户端上,我将Toy 对象转换为Toy JSON。我发送的字符串是这样的:[{"toyName":"buzzlightyear", "toyMaker":"mattel"}]

我的理解是,当我将 JSON POST 到 jax-rs restful 服务时,jax-rs 实现(我使用的是 RESTeasy 1.2)会以某种方式自动将该 JSON 字符串转换为 java Toy 对象。

我在 Java JAX-RS restful 服务上处理插入 Toy 对象的 POST 的代码是这样的:

@POST
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.TEXT_PLAIN})
@Path("toy/{customer}/insert")
public String insertToys(@PathParam("customer") String customer, List<Toy> toys);

如何记录/捕获 JSON 字符串的问题?在我看来,当调用 insertToys() 方法时,系统正在处理 JSON 到 Toy 对象的转换。所以很难弄清楚如何调试。

有人可以为我制定策略吗?我传入格式错误的 JSON(可能来自某些未转义字符)的可能性有多大? vs映射实体错了?谢谢!

【问题讨论】:

  • Unexpected EOF 的意思是:程序期待一些东西(一个右括号,一个 closin 标签)并且在此之前输入结束(得到 EOF)。检查一下。
  • 嗨,我如何记录我的 JAX-RS 插入方法提交和接收的原始 json 字符串?请求对象?我看不到如何获取请求正文。

标签: json jakarta-ee jaxb jax-rs resteasy


【解决方案1】:

您的 JSON 不正确。 该方法接受 List,因此您必须发送一个玩具对象数组:

[{"toyName":"buzzlightyear", "toyMaker":"mattel"}]

(注意大括号)。

更多对象:

[{"toyName":"buzzlightyear", "toyMaker":"mattel"},{"toyName":"rex", "toyMaker":"mattel"}]

【讨论】:

  • 抱歉,这是一个错字。我已经更正了 JSON。由于 JAXB 意外结束流异常,某些对象仍然无法插入。我想问题是,我如何查看正在解组的内容以找到错误?或者当 jaxb 运行时抛出这个异常时,我会在我的代码中哪里捕获它?在 jax-rs 方法中 (public String insertToys()...)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-08-17
相关资源
最近更新 更多