2014-11-14 84 views
0

我是Spring 3.2.5的新手,我試圖在另一個bean中注入一個bean作爲屬性,但是當我想使用該屬性時,它始終爲空。nullPointerException在Spring中注入Bean時

我使用了以下配置:

的applicationContext.xml:

<bean id="subscriptionService" class="fake.services.SubscriptionService"> 
</bean> 

<bean id="restController" class="fake.RestController"> 
    <property name="subscriptionService" ref="subscriptionService"></property> 
</bean> 

RestController.java:

@Path("/") 
@Secured("ROLE_USER") 
public class RestController { 

protected ISubscriptionService subscriptionService; 



/** 
* @return the subscriptionService 
*/ 
public ISubscriptionService getSubscriptionService() { 
    return subscriptionService; 
} 

/** 
* @param subscriptionService the subscriptionService to set 
*/ 
public void setSubscriptionService(ISubscriptionService subscriptionService) { 
    this.subscriptionService = subscriptionService; 
} 

} 

ISubscriptionService.java:

public interface ISubscriptionService { 

public UUID subscribe(); 

} 

Subsc riptionService.java

public class SubscriptionService implements ISubscriptionService { 

/** 
* 
*/ 
public SubscriptionService() { 
} 

/** 
* Subscribes a user and returns a uuid for the queue 
* @return the uuid for the queue 
*/ 
public UUID subscribe() { 
    return UUID.randomUUID(); 
} 

} 

我錯過了什麼?

謝謝!

更新:

錯誤我越來越:

十一月14,2014下午二時15分37秒 com.sun.jersey.spi.container.ContainerResponse mapMappableContainerException格雷夫斯:所述的RuntimeException不能 映射到的響應,重新投擲到HTTP容器在 顯示java.lang.NullPointerException fake.RestController.subscribe(RestController.java:42)維持在在 sun.reflect.DelegatingMethodAccessorImpl.invoke sun.reflect.NativeMethodAccessorImpl.invoke(來源不明) sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)(未知源) java.lang.reflect.Method.invoke(Unknown Source)at com.sun.jersey.spi.container.JavaMethodInvokerFactory $ 1.invoke(JavaMethodInvokerFactory.java:60) at com.sun.jersey.server.impl.model.method.dispatch.Abs​​tractResourceMethodDispatchProvider $ ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) 在 com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher。訊(ResourceJavaMethodDispatcher.java:75) 在 com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) 在 com.sun.jersey.server.impl.uri。 rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) at com.sun.jersey.server。 impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) 在 com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 在 com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java: 1542年) 在 com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1473) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java: 1419) at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl。java:1409) at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer。的java:558) 在 com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733) 在javax.servlet.http.HttpServlet.service(HttpServlet.java:727)在 組織.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server .WsFilter.doFilter(WsFilter.java:52 ) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.springframework。 security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 在 org.springframework.security。 web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) at org.springframework.security.web.FilterChainProxy $ VirtualF ilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 在 org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter( FilterChainProxy.java:342) 在 org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 在 org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java: 342) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 在 org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:201) 在 org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) at org.springframework.security.web.FilterC hainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 在 org.springframework.security.web.FilterChainProxy $ VirtualFilterChain。的doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 在 org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) 在 組織。springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain。的doFilter(ApplicationFilterChain.java:208) 在 fake.restutils.ResponseFilter.doFilterInternal(ResponseFilter.java:29) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) 在 有機.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) at org.springframework.web.filter.DelegatingFilterProx y.doFilter(DelegatingFilterProxy.java:260) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache .catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在 org.apache.catalina .core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor .java:1070) at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:611) at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor .RUN(JIoEndpoint.java:314) 在java.util.concurrent.ThreadPoolExecutor.runWorker(來源不明) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(來源不明) 在 org.apache.tomcat。 util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Unknown Source)

nov。 14,2014 2:15:37 PM org.apache.catalina.core.StandardWrapperValve invoke Grave:「Servlet.service()」pour la servlet Jersey Web Application agénéréune exception java.lang.NullPointerException at fake.RestController .subscribe(RestController.java:42)在 sun.reflect.NativeMethodAccessorImpl.invoke0(本機方法)維持在 sun.reflect.NativeMethodAccessorImpl.invoke(來源不明)在 sun.reflect.DelegatingMethodAccessorImpl.invoke(來源不明) java.lang.reflect.Method.invoke(Unknown Source)at com.sun.jersey.spi.container.JavaMethodInvokerFactory $ 1.invoke(JavaMethodInvokerFactory.java:60) at com.sun.jersey.server.impl.model .method.dispatch.Abs​​tractResourceMethodDispat chProvider $ ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) 在 com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) 在 com.sun.jersey。 server.impl.uri.rules.HttpMethodRule。accept(HttpMethodRule.java:302) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server.impl.uri。 rules.ResourceClassRule.accept(ResourceClassRule.java:108) at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) at com.sun.jersey.server。 impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) 在 com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1542) 在 com.sun.jersey。 server.impl.application.WebApplicationImpl._handleRequest(WebApplicatio nImpl.java:1473) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1419) 在 com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest( WebApplicationImpl.java:1409) 在 com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:409) 在 com.sun.jersey.spi.container.servlet.ServletContainer.service( ServletContainer.java:558) at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:733) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)at org.apache.catalina.core.ApplicationFilterChain .internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java :52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 有機springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:330) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(Filt erSecurityInterceptor.java:118) 在 org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 在 org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(的FilterChainProxy。 Java的:342) 在 org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 在 org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) at org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) 在 org.springframework .security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342) 在 org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:201) 在 org.springframework.security .web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.context.request.async。WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:50) 在 org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) 在 org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(的FilterChainProxy。 Java的:342) 在 org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 在 org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java:342) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) 在 org.springframework.web.filter .DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java :208) at fake.restutils.ResponseFilter.doFilterInternal(ResponseFilter.java:29) at org.springframework.web.filter.O ncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) 在 org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) 在 org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java: 260) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache .catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardConte xtValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在 org.apache.catalina.core .StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 在 org.apache.coyote.http11.Abstra ctHttp11Processor.process(AbstractHttp11Processor.java:1070) 在 org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:611) 在 org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run( JIoEndpoint.java:314) 在java.util.concurrent.ThreadPoolExecutor.runWorker(來源不明) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(來源不明) 在 org.apache.tomcat.util.threads .TaskThread $ WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread。運行(Unknown Source)

+0

其他人,我猜你是試圖在這種情況下創建一個web服務你也失蹤@RestController註釋 – 2014-11-14 13:09:19

+0

在這裏發佈錯誤。 – 2014-11-14 13:14:07

+0

我加了堆棧跟蹤 – Ben 2014-11-14 13:16:14

回答

0

我終於解決了它,或者是找到了一種讓它工作的方法。 問題是澤西爲每個請求創建一個新的對象,並且這個bean只在服務器啓動時被注入一次,因此在隨後由澤西(在請求時)創建對象時,這個bean不會被注入到新的對象,並返回空指針異常。

我添加下面的方法來我的控制器:

/** 
* Get the subscription bean 
* @return the subscriptionService 
*/ 
public ISubscriptionService getSubscriptionService(ServletContext servletContext) { 
    ApplicationContext ctx = WebApplicationContextUtils 
      .getWebApplicationContext(servletContext); 
    return ctx.getBean("subscriptionService", ISubscriptionService.class); 
} 

和調用服務,我只是做

this.getSubscriptionService(servletContext).subscribe() 

希望它可以幫助周圍

0

您是否實現了ISubscriptionService接口? applicationContext.xml中的你的subscriptionService bean應該引用該接口的實現。

+0

我編輯了我的問題,因爲我在我的問題中複製了界面而不是我的實現 – Ben 2014-11-14 13:22:07

+0

在發佈之前沒有看到它,對不起。 – 2014-11-14 13:29:14