访问Jersey资源类中的外部对象 [英] Access external objects in Jersey Resource class

查看:90
本文介绍了访问Jersey资源类中的外部对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下嵌入式码头服务器的情况:

I have the scenario where I have the following embedded jetty server:

    Server server = new Server(8080);
      Context root = new Context(server, "/", Context.SESSIONS);
      root.addServlet(
            new ServletHolder(
                  new ServletContainer(
                        new PackagesResourceConfig(
                              "edu.mit.senseable.livesingapore.platform.restws.representations"))),
            "/");
Myobj myobj = new Myobj(12,13);
      server.start();

,并具有以下资源类(使用Jersey框架)

and have the following resource class (using Jersey framework)

    import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/")
public class DataStreams {
   @GET
   @Path("/datastreams")
   @Produces(MediaType.TEXT_PLAIN)
   public String getDataStreams() {
      return getStreams("text");
   }
}

在我的资源类中,我想访问对象"myobj".有人可以建议我如何使用它吗?因为资源类直接由框架调用.

Here in my resource class I want to access a object "myobj" . can someone suggest how I can access it? because the resource class in directly called by the framework.

基本上我想知道如何将任何对象注入资源类?

[edit] Basically I want to know how to inject any object into resource class?

我尝试过:

 pkgrc.getSingletons().add(
        new SingletonTypeInjectableProvider<Annotation, InjectZk>(
              InjectZk.class, new InjectZk(this.zooKeeper)) {
        });

以下是提供程序类

  @Provider
public class InjectZk {
   private ZooKeeper zk;

   public InjectZk() {
      // TODO Auto-generated constructor stub
   }

   public InjectZk(ZooKeeper zk) {
      // TODO Auto-generated constructor stub
      this.zk = zk;
   }

   public ZooKeeper getZk() {
      return zk;
   }

}

并且我在资源类中将其用作:

and I am using it in resource class as:

 @Context

InjectZk zk;

InjectZk zk;

运行服务器时出现以下错误:

I am getting the following erorr while running the server:

SEVERE: Missing dependency for field: edu.mit.senseable.livesingapore.platform.core.components.clientrequest.InjectZk edu.mit.senseable.livesingapore.platform.core.components.clientrequest.DataStreams.zk
2011-09-28 16:18:47.714:/:WARN:  unavailable
com.sun.jersey.spi.inject.Errors$ErrorMessagesException

有什么建议吗? (顺便说一句,我正在使用嵌入式码头)

Any suggestions? ( BTW I am using Embedded jetty)

推荐答案

您可以通过编写自己的InjectableProvider和Injectable实现并将它们注册为应用程序中的提供程序来注入事物.有关如何实现此类提供程序的示例,可以检查 PerRequestTypeInjectableProvider 是助手您可以用来实现该类的类和

You can inject things by writing your own InjectableProvider and Injectable implementations and registering them as providers in your application. For an example of how such provider can be implemented you can check the SingletonTypeInjectableProvider or PerRequestTypeInjectableProvider which are helper classes you can use to implement that and OAuthProviderInjectionProvider for an example of a concrete implementation of a singleton type provider.

示例代码:

    Server server = new Server(8080);
    Context root = new Context(server,"/",Context.SESSIONS);

    ResourceConfig rc = new PackagesResourceConfig("edu.mit.senseable.livesingapore.platform.restws.representations");
    rc.getSingletons().add(new SingletonTypeInjectableProvider<javax.ws.rs.core.Context, Myobj>(Myobj.class, new Myobj(12,13)){});

    root.addServlet(new ServletHolder(new ServletContainer(rc)), "/");
    server.start();

,您应该能够使用@Context注释注入Myobj实例.

and you should be able to incject Myobj instance using @Context annotation.

@Path("/helloworld")
public class HelloWorldResource {
    @Context Myobj myClass;
    ....
}

这篇关于访问Jersey资源类中的外部对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆