【问题标题】:Java Serialization issues on Restlet versions above 2.1-M42.1-M4 以上 Restlet 版本上的 Java 序列化问题
【发布时间】:2014-02-26 17:10:10
【问题描述】:

我正在尝试运行http://restlet.org/learn/guide/2.2/introduction/first-steps/first-application 此处提供的非常简单的 Restlet 示例应用程序

我正在尝试在 Android 设备上运行客户端,但出现以下错误:

Unable to convert a [application/json,UTF-8] representation into an object of class org.restlet.example.common.Contact
java.io.IOException: Unable to create the Object representation
org.restlet.engine.converter.DefaultConverter.toObject(DefaultConverter.java:291)
org.restlet.service.ConverterService.toObject(ConverterService.java:170)
org.restlet.resource.Resource.toObject(Resource.java:828)
org.restlet.engine.resource.ClientInvocationHandler.invoke(ClientInvocationHandler.java:240)
$Proxy7.retrieve(Native Method)
org.restlet.example.serialisation.android.activity.ContactActivity$2.run(ContactActivity.java:142)
java.lang.Thread.run(Thread.java:1096)
java.lang.IllegalArgumentException: The serialized representation must have this media type: application/x-java-serialized-object or this one: application/x-java-serialized-object+xml
org.restlet.representation.ObjectRepresentation.<init>(ObjectRepresentation.java:204)
org.restlet.representation.ObjectRepresentation.<init>(ObjectRepresentation.java:133)
org.restlet.representation.ObjectRepresentation.<init>(ObjectRepresentation.java:114)
org.restlet.engine.converter.DefaultConverter.toObject(DefaultConverter.java:288)

让这个应用程序运行的唯一方法是使用 Restlet 2.1-M4 版本。我尝试使用 2.2-RC2,甚至使用“稳定”的 2.1.7 Restlet 版本。

我知道该应用程序已经使用“Restlet Framework 2.1 Milestone 4”进行了测试,但对我来说这听起来太奇怪了,后来的稳定版本(例如 2.1.7)在一个像这样的微不足道的例子上疯了!

应用程序本身非常简单,以至于我看不出问题可能出在哪里,除了 restlet 库本身的“错误”。 我能想象的唯一其他选择是,在restlet 2.1-m4之后,为了使java序列化正常工作,必须在客户端和/或服务器中添加一些2.1-m4不需要的额外代码.

任何cmets或建议将不胜感激。

最好的,

拉斐尔·格拉维纳

【问题讨论】:

    标签: java android serialization restlet


    【解决方案1】:

    由于潜在的安全问题,我们不得不禁用默认转换器,如下所述: https://github.com/restlet/restlet-framework-java/wiki/XEE-security-enhancements

    您应该将 Jackson 扩展添加到您的类路径(org.restlet.ext.jackson.jar 和依赖项)。希望这会有所帮助。

    【讨论】:

    • 非常感谢杰罗姆,所以我需要做的就是在我的类路径中添加 org.restlet.ext.jackson.jar 吗?我是否还必须在我的 java 源代码中明确设置 Jackson 转换器?另外,云您请更准确地说: org.restlet.ext.jackson.jar 需要哪些库?感谢您的支持!
    • Jerome Louvel,请您详细说明您的答案。我也面临这个问题。通过添加杰克逊罐没有任何帮助。我应该修改java代码以强制使用jackson吗?
    • 如果你通过 Maven 配置 Jackson 扩展,所有的依赖都会自动出现。如果您使用 Zip 发行版,则有一个 /lib/readme.txt 文件列出了所有依赖项。
    • 我在使用 J2SE 客户端和 Restlet 3.0-M1 版本时遇到了同样的问题。正如建议的那样,我添加了 org.restlet.ext.jackson (Maven),但这无济于事......我现在如何让我的客户启动并运行?我正在尝试通过 JSON 将序列化对象发布到我的 GAE 服务器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-01
    相关资源
    最近更新 更多