【问题标题】:PropertyException when setting Marshaller property with eclipselink.media-type value: application/json使用 eclipselink.media-type 值设置 Marshaller 属性时出现 PropertyException:application/json
【发布时间】:2013-08-28 21:35:10
【问题描述】:

我正在尝试遵循位于 here 的示例,但得到一个 javax.xml.bind.PropertyException。由于以下代码行,我收到此异常:

marshaller.setProperty("eclipselink.media-type", "application/json");

我已经复制/粘贴了上面列出的示例,所以我的代码正是您在此处看到的。搜索 SO 和 Google 并没有帮助,我想我会把它带给 SO 的天才寻求帮助。任何帮助将不胜感激,使用 json.org、Jackson 和 JAXB 使用 JSON 和 XML 进行(反)序列化已经变成了一个黑色无底坑,已经消耗了我将近一个月的时间。

我的第一印象是我没有正确指定 eclipselink 运行时(as described here),但这并没有产生解决方案。

堆栈跟踪:

Exception in thread "main" javax.xml.bind.PropertyException: name: eclipselink.media-type value: application/json   
  at org.eclipse.persistence.jaxb.JAXBMarshaller.setProperty(JAXBMarshaller.java:528)
  at com.dualoutput.DualOutput.main(DualOutput.java:20)

SSCCE

【问题讨论】:

    标签: java jaxb eclipselink marshalling moxy


    【解决方案1】:

    您需要确定您使用的是 EclipseLink 2.4.0 或更高版本。当前版本是 2.5.0,可以在(或从 Maven Central 获得)下载:


    更新

    MOXy 还提供以下便利类来访问扩展属性:

    • org.eclipse.persistence.jaxb.JAXBContextProperties
    • org.eclipse.persistence.jaxb.MarshllerProperties
    • org.eclipse.persistence.jaxb.UnmarshallerProperties

    这意味着您可以执行以下操作:

    marshaller.setProperty(MarshallerProperties.MEDIA_TYPE, "application/json");
    

    【讨论】:

    • 布莱斯,谢谢你。两天前,我以某种方式下载了 2.5 并删除了它,以为我实际上已经更新了它,并且没有检查清楚标记为 2.2 的 eclipse。这确实解决了我的问题。
    • 恕我直言,这是 JAXB 的一个可怕的设计缺陷。我不断收到这样的错误,因为对使用中的 JAXBContextFactory 没有直接的编程控制 - 例如没有版本检查。我现在避免使用 JAXB 不仅仅是因为这个原因。
    • 我仍然在 Jersey 2.18 中使用自定义提供程序看到此错误(尽管默认提供程序工作正常)。确认 org.eclipse.persistence.moxy、.core 和 .asm 为 2.6,甚至尝试将整个 eclipselink 的依赖项强制为 2.6,但没有成功。我正在使用便利类,仍然错误。有人有什么想法吗?
    猜你喜欢
    • 2017-07-20
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2022-11-16
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多