Restlet 2.1-M4以上版本的Java序列化问题



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

我试图在安卓设备上运行客户端,但我得到了以下错误:

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库本身的一个"bug"之外,我看不出问题可能出在哪里。我能想到的唯一其他选择是,在restlet 2.1-m4之后,为了让java序列化正常工作,必须在客户端和/或服务器中添加一些2.1-m4不需要的额外代码。

如有任何意见或建议,我们将不胜感激。

最佳,

Raffaele Gravina

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

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

最新更新