2012-08-14 62 views
2

我吉斯配置看起來像:吉斯,JerseyServletModule,爲法缺失的依賴,REST服務配置

public class SocialServiceGuiceConfig extends GuiceServletContextListener { 
    @Override 
    protected Injector getInjector() { 
     final Module [] modules = { 
       new JerseyServletModule() { 
        @Override 
        protected void configureServlets() { 
         bind(GraphApi.class); 

         bind(SocialUncheckedExceptionMapper.class).in(Singleton.class); 
         bind(SocialUnhandledExceptionMapper.class).in(Singleton.class); 

         serve("/*").with(
          GuiceContainer.class); 
        } 
       }, 
     }; 

     return Guice.createInjector(modules); 
    } 
} 

我的API定義看起來是這樣的:

@Path("/{" + BUSINESS_CUSTOMER_PARAMETER + "}") 
public BusinessCustomerApi businessCustomerAndContext(
     @PathParam(BUSINESS_CUSTOMER_PARAMETER) final BusinessCustomerPathParam businessCustomerPathParam, 
     @QueryParam(LOCALE_PARAMETER) final String locale) { 

我在得到異常我的日誌:

INFO: Binding com.business.social.next.service.api.v1.GraphApi to GuiceManagedComponentProvider with the scope "PerRequest" 
Aug 13, 2012 9:20:05 PM com.sun.jersey.spi.inject.Errors processErrorMessages 
SEVERE: The following errors and warnings have been detected with resource and/or provider classes: 
    WARNING: A HTTP GET method, public void com.business.social.next.service.api.v1.GraphApi.get(), MUST return a non-void type. 
    SEVERE: Missing dependency for method public com.business.social.next.service.api.v1.BusinessCustomerApi com.business.social.next.service.api.v1. GraphApi.graphRequestContext(com.business.social.next.graph.protocol.BusinessCustomer,java.lang.String) at parameter at index 0 
Aug 13, 2012 9:20:05 PM org.apache.catalina.core.StandardContext filterStart 
SEVERE: Exception starting filter Guice Filter 
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:771) 
    at com.sun.jersey.guice.spi.container.servlet.GuiceContainer.initiate(GuiceContainer.java:121) 
    at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.initiate(ServletContainer.java:318) 
    at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:609) 
    at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:210) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:373) 
    at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:556) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    at com.google.inject.servlet.ServletDefinition.init(ServletDefinition.java:117) 
    at com.google.inject.servlet.ManagedServletPipeline.init(ManagedServletPipeline.java:82) 
    at com.google.inject.servlet.ManagedFilterPipeline.initPipeline(ManagedFilterPipeline.java:102) 
    at com.google.inject.servlet.GuiceFilter.init(GuiceFilter.java:172) 
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:275) 
    at org.apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.java:397) 
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:108) 
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:3693) 
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015) 
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:719) 
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1015) 
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
    at org.apache.catalina.core.StandardService.start(StandardService.java:448) 
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:710) 
    at org.apache.catalina.startup.Catalina.start(Catalina.java:552) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:288) 
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:413) 
Aug 13, 2012 9:20:05 PM org.apache.catalina.core.StandardContext start 
SEVERE: Error filterStart 
Aug 13, 2012 9:20:05 PM org.apache.catalina.core.StandardContext start 
SEVERE: Context [] startup failed due to previous errors 

爲什麼會發生這種情況?在網上很難找到信息,並且無法弄清楚什麼路徑可以徘徊。

回答

2

原來我並沒有遵循類型BusinessCustomerPathParam@PathParam類型規則。

的規則羅列如下:http://jsr311.java.net/nonav/releases/1.1/javax/ws/rs/PathParam.html

類型註釋參數,字段或屬性的必須:

  • PathSegment,該值將是匹配的部分的最後一段的路徑。有關檢索所有請求路徑段的方法,請參閱UriInfo
  • List<PathSegment>,該值將是與匹配命名模板參數的路徑段對應的PathSegment列表。有關檢索所有請求路徑段的方法,請參閱UriInfo
  • 是一種原始類型。
  • 有一個接受單個String參數的構造函數。
  • 使用名爲valueOffromString的靜態方法接受單個字符串參數(例如,請參閱Integer.valueOf(String))。

我沒那個拿了String或的static選項之一的構造函數。

不幸的是,日誌中提供的錯誤消息並不是非常有用。

0

當試圖綁定已注入參數的接口時,我得到了同樣的消息,但是我忘記了將@Inject註釋添加到我的構造函數中。請記住檢查一下,因爲它讓我把頭撞在牆上很久了。