我试图将资源的实例注入具有Singleton作用域的JAX-RS应用程序,但当我这样做时,我得到:
警告:在服务器运行时中注册的提供程序com.test.jersey.app.MyResource未实现任何适用于服务器运行时的提供程序接口。由于约束配置问题,将忽略提供程序com.test.jersey.app.MyResource。
我有一个如下的应用程序,它需要一个已经运行的MyResource实例:
public class MyApp extends ResourceConfig {
public MyApp(MyResource res) {
super(
MyService.class
);
registerInstances(res);
}
}
和
public class MyResource {
String instanceVar;
public MyResource(String test) {
instanceVar = test;
}
public String getString() {
return instanceVar;
}
}
带服务:
@Path("/service")
public class MyService {
@GET
@Path("")
public String get(@Context MyResource res) {
String output;
if (res != null) {
output = res.getString();
} else {
output = "NOT SET";
}
return "output: " + output;
}
}
正在使用以下命令运行:
public static void main(String[] args) {
MyResource resource = new MyResource("foo");
MyApp restApp = new MyApp(resource);
ServletHolder servlet = new ServletHolder(new ServletContainer(restApp));
Server jettyServer = new Server(8080);
ServletContextHandler context = new ServletContextHandler(jettyServer, "/*");
context.addServlet(servlet, "/*");
try {
jettyServer.start();
jettyServer.join();
} catch (Exception e) {
e.printStackTrace();
} finally {
jettyServer.destroy();
}
}
我尝试使用AbstractBinder,但是找不到将MyResource的实例绑定到服务的方法。
依赖关系:
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-server</artifactId>
<version>2.23.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.23.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-jetty-http</artifactId>
<version>2.23.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.23.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-servlet</artifactId>
<version>9.2.19.v20160908</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.2.19.v20160908</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.2.19.v20160908</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-jmx</artifactId>
<version>9.2.19.v20160908</version>
</dependency>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0</version>
</dependency>
</dependencies>
使用 DI 系统使其可注射
final MyResource resource = new MyResource(...);
final AbstractBinder binder = new AbstractBinder() {
@Override
public void configure() {
bind(resource).to(MyResource.class);
}
};
final MyApp app = new MyApp();
app.register(binder);
另请参见:
我正在创建一个在Karaf中作为OSGi容器运行的应用程序,并使用OSGi HTTP服务和Jersey来公开REST APIs。我需要添加SAML2身份验证和基于权限的授权。为此,我想在Shiro中使用基于注释的方法,因为spring似乎正在远离OSGi。我的问题: 带有SAML罐子的Shiro是否适合OSGi环境? 我想使用WSO2作为身份提供者。Shiro和WSO2一起工作有任何警告吗? 对于
我正在进行一个示例项目,使用: JAX-RS(泽西2) JSR-303 Bean validaiton 泽西测试测试 Grizzly Http容器 杰克逊2.7.3 在添加@JsonIgnore和@JsonProperty之前,一切都按预期进行,在对对象属性执行bean验证时,我能够毫无问题地运行测试。通常情况下,“password”字段不应用于反序列化,所以我用@JsonIgnore标记了它的g
我目前使用的是球衣 我现在要做的是设置泽西,这样当查询参数进来时(比如缩进),我可以告诉Jackson以“更漂亮的格式,也就是缩进”序列化JSON。您可以通过使用SerializationConfig.Feature.INDENT_OUTPUT配置JSON映射器来轻松地告诉Jackson这样做。 问题是,我如何在每个请求的基础上获取一个queryparam并使用它来修改Jackson的输出?
我正在编写一个公开 REST API 的简单微服务。所以我开始使用泽西岛,当然我需要将我的对象注入球衣资源中。基本上,我有2个类来定义一组资源,其中一些需要使用另一个服务。 所以基本上我有: } 该接口的2种实现(MyServiceBean和My备选ServiceBean) 而且,就我对阅读新泽西文件的理解,我定义了一个hk2活页夹: 我将此活页夹注册到ApplicationConfig类 } 并
我有一个资源类 我尝试了泽西岛2.0的依赖注入中的答案 如果我使用 启动服务器时,我得到 如果我删除了上述依赖项,那么我得到 资源配置类是 活页夹类是 我在嵌入式模式下使用tomcat并添加init参数 我如何在控制器中注入服务?注入是单元测试的首选方式吗(当服务实现调用另一个服务时,比如说XService ),单元测试不应该依赖于Xservice,因此demoServiceImpl如何从测试中将
我正在迁移一个遗留服务框架,该框架使用java序列化/反射来注册服务,并将它们作为远程endpoint(javabin over http)或本地调用无缝地调用。我已经将远程调用替换为jerseyendpoint。并使用基于hk2 aop的拦截器重新构建了现有框架的部分拦截能力。当远程客户端调用endpoint时,它工作正常。现在,我需要对服务方法的本地调用执行相同的操作,并且能够使用与远程服务方