2014-11-14 85 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