2013-07-03 2 views
0

Я пытаюсь ввести конструктор класса ресурсов с помощью Guice. Тем временем я использовал GrizzlyWebServer в качестве сервера для обработки reqquest из класса ресурсов. Ниже я дал некоторые из кодов и ошибок, которые у меня есть.Конструктор инжекции в джерси

GoogleModule класс:

public class GoogleModule extends AbstractModule { 

    @Override 
    protected void configure() { 
    bind(Interface.class).to(Implementation.class); 
    } 
} 

класс ресурсов

@Path("/path") 
public class ResourceClass { 
    Logger log = LoggerFactory.getLogger(ResourceClass.class); 
    private final Interface interface; 

    GConnection con = new GConnection(); 

    @Inject 
    public ResourceClass(Interface interface) { 
    this.interface = interface; 
    } 

    @GET 
    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) 
    public List<Object> getObjects() { 
    return interface.list(); 
    } 
} 

и перед запуском гризли сервера я называю это утверждение.

Injector injector = Guice.createInjector(new GoogleModule()); 
webserver.startServer(); 

после этой настройки я обнаружил следующую ошибку.

SEVERE: Missing dependency for constructor public  com.motilink.services.ResourceClass(Interface) at parameter index 0 
Jul 3, 2013 9:52:36 AM com.sun.grizzly.http.servlet.ServletAdapter doService 
SEVERE: service exception: 
com.sun.jersey.spi.inject.Errors$ErrorMessagesException 
at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) 
at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) 
at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:770) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:765) 
at com.sun.jersey.spi.container.servlet.ServletContainer.initiate(ServletContainer.java:489) 
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:319) 
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:605) 
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210) 
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374) 
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557) 
at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
at com.sun.grizzly.http.servlet.ServletAdapter.loadServlet(ServletAdapter.java:451) 
at com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:390) 
at com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:347) 
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166) 
at com.sun.grizzly.tcp.http11.GrizzlyAdapterChain.service(GrizzlyAdapterChain.java:186) 
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:166) 
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:824) 
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:721) 
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1014) 
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:220) 
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102) 
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88) 
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76) 
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53) 
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57) 
at com.sun.grizzly.ContextTask.run(ContextTask.java:69) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:530) 
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:511) 
at java.lang.Thread.run(Thread.java:680) 
+0

Я не уверен, что Guice может вводить конструкторы с Джерси. Вместо этого попробуйте переключиться на инъекцию поля. – condit

ответ

0

Учитывая, что вы работаете через сервлет вам нужно, чтобы убедиться, что Guice подключен правильно, так что ресурсы создаются с инъекцией, а не экземпляр непосредственно. То, как у вас есть код, теперь инжектор не используется для создания нового экземпляра ресурса и, следовательно, вашей ошибки.

Подробнее о том, как установить это на Guice Wiki.

+0

Спасибо, но я решил. Я забыл добавить адаптер с инжектором на стороне сервера! –

Смежные вопросы