访问 Jersey Resource 类中的外部对象类中、对象、Jersey、Resource

由网友(念她ㄣ)分享简介:我有以下嵌入式码头服务器的场景: 服务器 server = new Server(8080);上下文根 = new Context(server, "/", Context.SESSIONS);根.addServlet(新的 ServletHolder(新的 ServletContainer(新的 PackagesRe...

我有以下嵌入式码头服务器的场景:

 服务器 server = new Server(8080);上下文根 = new Context(server, "/", Context.SESSIONS);根.addServlet(新的 ServletHolder(新的 ServletContainer(新的 PackagesResourceConfig(edu.mit.senseable.livesingapore.platform.restws.representations"))),"/");Myobj myobj = new Myobj(12,13)​​;server.start();

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

 导入 javax.ws.rs.Consumes;导入 javax.ws.rs.FormParam;导入 javax.ws.rs.GET;导入 javax.ws.rs.POST;导入 javax.ws.rs.Path;导入 javax.ws.rs.PathParam;导入 javax.ws.rs.Produces;导入 javax.ws.rs.core.MediaType;@小路("/")公共类数据流{@得到@Path("/数据流")@Produces(MediaType.TEXT_PLAIN)公共字符串 getDataStreams() {返回 getStreams("text");}}
Vue.js vue resource全攻略

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

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

我试过了:

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

下面是提供者类

 @Provider公共类 InjectZk {私有 ZooKeeper zk;公共 InjectZk() {//TODO 自动生成的构造函数存根}公共 InjectZk(ZooKeeper zk) {//TODO 自动生成的构造函数存根这个.zk = zk;}公共动物园管理员 getZk() {返回 zk;}}

我在资源类中使用它:

 @Context

InjectZk zk;

我在运行服务器时遇到以下错误:

严重:缺少字段的依赖项:edu.mit.senseable.livesingapore.platform.core.components.clientrequest.InjectZk edu.mit.senseable.livesingapore.platform.core.components.clientrequest.DataStreams.zk2011-09-28 16:18:47.714:/:WARN: 不可用com.sun.jersey.spi.inject.Errors$ErrorMessagesException

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

解决方案

您可以通过编写自己的 InjectableProvider 和 Injectable 实现并将它们注册为应用程序中的提供程序来注入东西.有关如何实现此类提供程序的示例,您可以查看 SingletonTypeInjectableProvider 或 PerRequestTypeInjectableProvider 是助手你可以用来实现它的类和 OAuthProviderInjectionProvider 获取单例类型提供程序的具体实现示例.

示例代码:

 服务器 server = new Server(8080);上下文根 = new Context(server,"/",Context.SESSIONS);ResourceConfig rc = new PackagesResourceConfig("edu.mit.senseable.livesingapore.platform.restws.representations");rc.getSingletons().add(new SingletonTypeInjectableProvider(Myobj.class, new Myobj(12,13)​​){});root.addServlet(new ServletHolder(new ServletContainer(rc)), "/");server.start();

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

@Path("/helloworld")公共类 HelloWorldResource {@Context Myobj 我的类;……}

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();

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");
   }
}

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?

[Edit]

I tried this:

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

following is the provider class

  @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;

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)

解决方案

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.

sample code:

    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();

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

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

阅读全文

相关推荐

最新文章