在 Tomcat 7 中将 JAX-RS (RESTEasy) 与 CDI (Weld) 结合使用

2024-06-26

在 JSF 2.0 应用程序(在 Tomcat 7 上运行并使用焊接 1.1.1.Final)中,我想建议我的用户下载一些二进制文件(.doc、.pdf 等)。

为了满足该需求,我想使用 JAX-RS (RESTEasy 2.2.0.Final) 资源 bean(注释为@Path)。问题是在该 bean 内部,我想从注释有的字段调用服务@Inject注解。

其实就像焊接用户尝试类似的事情 http://seamframework.org/Community/WELDAndInjectingFromExternalJars我有一个NullPointerException:Weld 不会向我提供服务。

所以我读了JBoss 社区 wiki 上的一篇文章讨论如何将 RESTEasy 与 CDI 集成 http://community.jboss.org/wiki/RESTEasy-CDIIntegration所以我让我的 Maven 战争项目依赖于org.jboss.resteasy:resteasy-cdi这是我的web.xml :

<!-- Weld -->
<resource-env-ref>
    <description>Object factory for the CDI Bean Manager</description>
    <resource-env-ref-name>BeanManager</resource-env-ref-name>
    <resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type>
</resource-env-ref>
<listener>
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener>
<filter>
    <filter-name>ConversationPropagationFilter</filter-name>
    <filter-class>org.jboss.weld.servlet.ConversationPropagationFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ConversationPropagationFilter</filter-name>
    <url-pattern>*</url-pattern>
</filter-mapping>

<!-- Resteasy -->
<listener>
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<servlet>
    <servlet-name>Resteasy</servlet-name>
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<context-param>
    <param-name>resteasy.injector.factory</param-name>
    <param-value>org.jboss.resteasy.cdi.CdiInjectorFactory</param-value>
</context-param>
<context-param>
    <param-name>resteasy.scan</param-name>
    <param-value>true</param-value>
</context-param>
<servlet-mapping>
    <servlet-name>Resteasy</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<context-param>
    <param-name>resteasy.servlet.mapping.prefix</param-name>
    <param-value>/rest</param-value>
</context-param>

现在的问题是,当我的应用程序引导时,我遇到了该异常:

java.lang.RuntimeException: Unable to instantiate InjectorFactory implementation.
    at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:141)
    at org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap.contextInitialized(ResteasyBootstrap.java:28)
...
Caused by: java.lang.NullPointerException
    at org.jboss.resteasy.cdi.CdiInjectorFactory.lookupBeanManager(CdiInjectorFactory.java:116)
    at org.jboss.resteasy.cdi.CdiInjectorFactory.<init>(CdiInjectorFactory.java:41)
...
    at java.lang.Class.newInstance(Class.java:308)
    at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:133)

当我删除resteasy.injector.factory上下文参数,我有一个NPE当尝试从带有注释的字段变量获取我的服务时@Inject ...

有谁知道如何配置 RESTEasy beans 以由 Weld 管理(并可以注入 JAX-RS 资源)?


这已在 RESTEasy 主干中修复。看https://issues.jboss.org/browse/RESTEASY-558 https://issues.jboss.org/browse/RESTEASY-558了解详情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Tomcat 7 中将 JAX-RS (RESTEasy) 与 CDI (Weld) 结合使用 的相关文章

  • Resteasy 可以查看 JAX-RS 方法的参数类型吗?

    我们使用 Resteasy 3 0 9 作为 JAX RS Web 服务 最近切换到 3 0 19 我们开始看到很多RESTEASY002142 Multiple resource methods match request警告 例如 我们
  • 无效数据的 REST 响应代码

    如果出现以下情况 应将什么响应代码传递给客户端 用户注册时传递了无效数据 例如电子邮件格式错误 用户名 电子邮件已存在 我选择了403 我还发现了以下我觉得可以用的 维基百科 412 前提条件失败 服务器不满足请求者要求的先决条件之一 提出
  • 更改作为战争部署的 spring-boot 应用程序的默认欢迎页面

    我试图找到一种方法来更改在生产中作为战争部署的 spring boot 应用程序的默认欢迎页面 但如果没有 web xml 文件 我找不到方法来做到这一点 根据文档 我们可以使用 EmbeddedServletContainerFactor
  • RESTful Web 服务:java.lang.NullPointerException service.AbstractFacade.findAll

    我使用 NetBeans 7 的 来自数据库的 RESTful Web 服务 向导创建了一个简单的 XML Web 服务 此时 我想从关联的 mySQL 数据库发布用户列表 当我尝试通过其 URL http localhost 8080 d
  • 编组/取消编组 使用 JAXB 列出 Jersey JAX-RS 中的对象

    早上好 今天早上 当我浏览泽西岛实体提供商时MessageBodyReaders and MessageBodyWriter我遇到了以下问题 我想编写一个资源方法和客户端 返回自定义对象列表 媒体类型是application xml 所以我
  • CDI - 正确的 bean.xml 格式是什么?

    我对 bean xml 文件的正确格式和用法有疑问 在我的项目中 我通常将此内容用于我的 bean xml 文件 不使用 explizit bean 声明
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • bean 的 CDI @TransactionAttribute

    我正在尝试CDI在测试应用程序上 我有一个DAO它注入一个托管的容器JTA像这样的持久化上下文 public class TestDAO implements Serializable PersistenceContext private
  • REST 中子资源和路径变量冲突?

    设计路径解析可能含糊不清的 REST API 是否被认为是不好的做法 例如 GET animals id Returns the animal with the given ID GET animals dogs Returns all a
  • 在哪里使用 EJB 3.1 和 CDI?

    我正在制作一个基于 Java EE 的产品 我在其中使用玻璃鱼 https en wikipedia org wiki GlassFish3 和 EJB 3 1 我的应用程序有会话bean https en wikipedia org wi
  • 在 Spring 中使用 @Inject Instance

    我知道 Instance 不是 JSR 330 的一部分 但是 Spring 有等效的吗 我感兴趣的是 Instance 实现 Iterable 因此 Provider 不是正确的答案 public interface Report 有 2
  • 如何使用 JAXRS 和 JAXB 设置 Restlet 服务器?

    我一直在互联网上查找 试图找到如何执行此操作的示例 我只是想设置一个 REST 服务器 它自动将对象序列化到 XML 或从 XML 序列化对象 我只是想提供一个服务器 以便于用户登录 注销以及仅在用户登录后访问 XML 对象列表 启动并运行
  • Restful WS 中的 WSDL 等价物是什么?如果没有,消费者如何生成所需的客户端类?

    比如说 我在java中有生产者 在 net中有消费者 生产者有一个方法 需要 员工作为方法参数并在数据库中创建员工 对于基于 SOAP 的 ws dot net 客户端将调用 WSDL 并创建存根 包括 dot net 中的员工数据表示 现
  • 从 AJP 连接器请求中检索 Shibboleth 属性

    当我在 Apache 上运行 Shibboleth 身份验证时遇到了一个奇怪的问题 当 Tomcat7 在后端运行时 Apache 通过 mod proxy ajp 发送所有内容 Shibboleth 的参数也是如此 In the 文档 h
  • 如何告诉 PMD 忽略未使用代码的 @PostConstruct 方法

    我们有一个由 PMD 检查是否存在违规行为的项目 例如未使用的私有方法 我们的问题是我们不知道是否可以忽略带有注释的私有方法 PostConstruct 该规则定义如下
  • CDI 装饰另一个 JAR 中的服务

    我想使用 CDI 的装饰器模式来增强服务提供的业务逻辑 我尝试装饰的服务位于另一个模块 用 Maven 术语来说 因此是另一个 JAR 例如 提供的服务在模块中com acme provider当装饰者在的时候com acme consum
  • Java 8 LocalDate Jackson 格式

    For java util Date当我做 JsonFormat shape JsonFormat Shape STRING pattern dd MM yyyy private Date dateOfBirth 然后在我发送时在 JSON
  • 如何拒绝对 Tomcat 目录的 Web 访问

    我的 webapp 目录中有一个文件夹 mywebapp repositoryFolder 此 Web 应用程序旨在接受带有凭据的 POST 请求 并在正确身份验证后在 http 响应中提供文件 我想阻止对这些文件的网络访问 例如 应该不可
  • JAX-RS框架[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我一直在使用 JAX RS 参考实现 泽西岛 进行一些工作 我知道至少有两个其他框架 Restlet 和 Apache CXF 我的问题是
  • 为什么 JAX-WS 是 JDK 的一部分,而 JAX-RS 不是?

    使用 Eclipse 时 我可以使用 JAX WS 注释 例如 WebService 而不包含任何外部依赖项 但我不能对 JAX RS 注释执行相同的操作 例如 Path 我看了一下this https stackoverflow com

随机推荐