【问题标题】:RESTEasy server in OSGI can't process annotationsOSGI 中的 RESTEasy 服务器无法处理注释
【发布时间】: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


【解决方案1】:

我遇到了同样的问题。为了解决这个问题,我创建了以下项目:

https://issues.jboss.org/browse/RESTEASY-640

根据我的研究,我最终选择了以下选项:

  • OSGi 包如何使用嵌入式 Resteasy 实例的简单代码示例:bitbucket.org/mark1900/resteasy-osgi-embedded

  • OSGI 包如何导出其他 OSGi 包可以集成和使用的 Resteasy 服务的简单代码示例:bitbucket.org/mark1900/resteasy-osgi-service

【讨论】:

  • 非常感谢!这真的很有用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-21
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 1970-01-01
  • 2022-11-28
相关资源
最近更新 更多