我一直在编写一个充当服务器的项目,并且可以使客户端使用服务并运行。 My Server应用程序是基于Spring MVC 3框架的简单CRUD应用程序。记录名为Person的单个表。我的WebServices是SOAP1.1服务,一旦我在TomCat上部署我的项目就会生效。我可以在localhost上访问它的wsdl,我可以通过在tomcat上运行和部署该项目来实现这些web服务。我通过重新调整Service方法中的标志来测试serives。现在的问题是。如果我通过其控制器在Web上运行Server应用程序,我可以正确地通过Web界面进行测试。所有组件Repository,Service DAO都经过适当注释并可在Web上运行。但是当我尝试通过我的服务做同样的工作时。我获得了Autowired对象的NullPointerExceptions。
以下是一个例外。请通过评论帮助并完成您的想法。
WARN org.apache.cxf.phase.PhaseInterceptorChain - Application {http://service.accounting.cassit.com/}personService#{http://service.accounting.cassit.com/}deletePerson has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault
at org.apache.cxf.service.invoker.AbstractInvoker.createFault(AbstractInvoker.java:155)
at org.apache.cxf.jaxws.AbstractJAXWSMethodInvoker.createFault(AbstractJAXWSMethodInvoker.java:86)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:121)
at org.apache.cxf.jaxws.JAXWSMethodInvoker.invoke(JAXWSMethodInvoker.java:61)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:75)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor$1.run(ServiceInvokerInterceptor.java:58)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at org.apache.cxf.workqueue.SynchronousExecutor.execute(SynchronousExecutor.java:37)
at org.apache.cxf.interceptor.ServiceInvokerInterceptor.handleMessage(ServiceInvokerInterceptor.java:106)
at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)
at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
at org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:102)
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:464)
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:188)
at org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:103)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at com.cassit.accounting.service.PersonServiceImpl.deletePerson(PersonServiceImpl.java:47)
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.cxf.service.invoker.AbstractInvoker.performInvocation(AbstractInvoker.java:173)
at org.apache.cxf.service.invoker.AbstractInvoker.invoke(AbstractInvoker.java:89)
查看此行并检查第47行或相应的java文件。我知道我正在访问AutoWired属性。为什么会这样?
Caused by: java.lang.NullPointerException
at com.cassit.accounting.service.PersonServiceImpl.deletePerson(PersonServiceImpl.java:47)
最好的问候, aqif
答案 0 :(得分:0)
Spring依赖注入仅适用于Spring管理的组件。如果您的课程不是由Spring管理的,那么@Autowired
将无效。检查它是否被声明为Spring bean(使用<bean>
或注释)。
答案 1 :(得分:0)
参见Spring Reference中的Section 4.9, Annotation-based container configuration。
重要的一点是第4.9.1节之前的注释,引用:
<context:annotation-config/>
仅查找在定义它的同一应用程序上下文中的bean上的注释。这意味着,如果您将<context:annotation-config/>
放在WebApplicationContext
的{{1}}中,它只检查控制器中的DispatcherServlet
bean,而不检查您的服务。有关详细信息,请参阅Section 16.2, “The DispatcherServlet”。
您的@Autowired
- 注释类可能未被扫描;尝试:
@Service