【发布时间】:2011-11-30 17:11:05
【问题描述】:
我正在尝试在 Equinox 中使用 RestEasy。我在网上看到的有关此配置的唯一文档是:http://sarbarian.wordpress.com/2010/03/07/resteasy-and-osgi-perfect-match/
我已按照此处的步骤修复了一些问题,但此时我被卡住了。当我在服务器上调用一个url时,调用到达了带注释的类和方法,但是resteasy似乎无法序列化结果。我得到错误:
org.jboss.resteasy.core.SynchronousDispatcher
SEVERE: Failed executing GET /sample2/hello
org.jboss.resteasy.core.NoMessageBodyWriterFoundFailure: Could not find MessageBodyWriter for response object of type: java.lang.String of media type: */*
我从 RestEasy Jars (2.2.1.GA) 创建了一个 OSGI 包。捆绑包会自动导出所有包。不知何故,我猜 OSGI 类加载器无法加载所需的类。非常感谢您的意见,因为我真的被卡住了!
【问题讨论】:
-
从 OSGi 的角度来看很难回答,因为我不知道 Resteasy 试图加载哪个类。我假设它在某些配置中查找媒体类型和响应对象,然后根据结果加载一个 MessageBodyWriter 实例。是否可以添加日志记录或在调试器中运行以查找此信息?从那里我们可以确定在哪里可以找到该类以及如何使其对 Resteasy 可见。
-
好的,经过大量调试,我想我找到了问题所在。最近版本的 RestEasy 使用 meta-inf/services 方法来声明处理 xml/json/等的类。这种机制 (SPI) 在 OSGI 中不存在,因此,RestEasyProviderFactory 实例永远不会以 content-handling_type 映射结束。所以我需要找到一种分配这些内容处理程序的方法。我试图弄清楚resteasy是如何使用SPI来填充这个类的。
标签: eclipse rest osgi resteasy equinox