我正在泽西岛应用程序中使用 CDI。在根资源上,CDI 注入按预期工作,但每当我返回子资源时,CDI 注入源都不可用。
具有子资源定位器的根资源:
@Path("")
public class MyResource {
@Inject @Named("name") // works
private String name;
@Context
private ResourceContext context;
@Path("test2")
public Object test2() {
return MySubResource.class;
//return context.getResource(MySubResource.class); // this does not work either
}
}
子资源:
public class MySubResource {
@Inject @Named("name") // error
private String name;
@GET
public Response test() {
return Response.ok("Name in sub resource: " + name).build();
}
}
错误:
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=String,parent=MySubResource,qualifiers={@javax.inject.Named(value=name)},position=-1,optional=false,self=false,unqualified=null,1235803160)
我正在使用org.glassfish.jersey.ext.cdi: jersey-cdi1x
和Weld依赖项,在Undertow上运行,并将Weld servlet侦听器添加到部署中。
同样,对根资源的相同注入确实有效。< code>@Named("name ")字符串由< code>@ApplicationScoped生成器生成。
这不应该有效吗?我错过了什么?
此处提供最小的 Maven 项目示例:https://gitlab.com/Victor8321/jersey-sub-resource-cdi
注意:这方面存在一个公开问题,但不确定官方对此的立场是什么:https://java.net/jira/browse/JERSEY-3184
正如https://github.com/eclipse-ee4j/jersey/issues/3456,所指出的,向子资源类添加一个伪< code>@Path("xyz")是一种“修复”。然而,这暴露了虚拟路径下的子资源。
仅通过 CDI 注入实例也有效(@Inject实例
我发现了另外两种完全有效的方法(CDI注入和JAX-RS注入),并且没有副作用(如
@Path
):
使用@Provider
注释子资源类。
注册()
资源配置
(或应用程序
)中的子资源类。
这两种方法似乎都有效,因为它们让Jersey -进而让CDI -知道这个类。
注意:我已经相应地更新了我的示例项目,以供将来参考。
问题内容: 分析了整个互联网,但无法弄清楚为什么会发生这种情况。我有一个最简单的项目(使用jersey-quickstart- grizzly2原型),并且只有一个Jersey资源。我将Guice用作DI,因为CDI也不想与Jersey合作。问题在于,Guice在注入Jersey的资源时无法解析要使用的类。它在外面很好用,但不适用于泽西岛。这是泽西岛的资源: 传输接口: 它的实现: 遵循Googl
我决定在这部分替换Web.XML: 我指向servlet容器Jersey,它将接受对REST-Controllers的请求,表明在启动时有必要扫描路径com . skillsimprover . REST examples . REST上的包REST,并表明资源的所有方法和类的基URI都填充了/api/* 从 JAX-RS 2.x 版本开始,可以使用应用程序类或资源配置类来注册包和资源。 我执行了
我有一个奇怪的问题,我完全不明白,泽西岛2.6。 我无法解释为什么,但其中一个查询参数使泽西岛抛出模型验证异常 查询参数“一些价值”使球衣投掷: 如果我用String代替SomeValueDTO,一切都没问题。SomeValueDTO是一个非常经典的POJO,带有一个空的构造函数和getter/setter。 如果有人有伊迪亚!!
免责声明:我刚刚开始使用OSGI,所以请忍受我和我的知识不足... 为了本练习,假设我有一个基于泽西岛 (2.17.0) 的 REST 应用程序在 OSGI 环境中的 Jetty (9.2.10) 下运行,它为用户提供了一些通过 SOAP 从单独的服务器收集的统计信息。 我现在尝试在另一个应用程序中重用一些现有代码,该应用程序应该通过JMS(或其他东西)检索统计信息。 我的目的是在捆绑包中为客户端
我正在使用Jersey创建RESTful API。我想通过Accept头实现版本控制。我的资源(例如MyResourceV1、MyResourceV2和SubresourceV1、SubresourceV2)被分为不同的类。现在,我使用的是内容类型
在Spring中,我们有基于注释和基于XML的配置。虽然第一种配置被推荐用于快速开发,但第二种配置更加灵活,能够处理特殊情况。我们目前有两种配置:为JUnit测试注入模拟和从外部库配置bean。 我还没有为CDI的XML配置找到任何等价物,所以我的问题是,如何处理这种bean的依赖注入?它们来自外部库,需要进行配置,不可能向它们添加任何注释。