2012-01-29 66 views
1

我一直在寫一個充當服務器的項目,並讓服務啓動並運行,供客戶端使用。 我的服務器應用程序是基於Spring MVC 3框架的簡單CRUD應用程序。超過名爲Person的單個表的記錄。我的WebServices是SOAP1.1服務器,並且只要我在TomCat上部署我的項目,就會生效。我可以在本地主機上訪問它的wsdl,並且可以通過在tomcat上運行和部署該項目來訪問這些Web服務。我通過從服務方法中重新調用標誌來測試服務器。現在的問題是。如果我通過它的控制器在網上運行服務器應用程序,我可以通過Web界面正確處理。所有組件Repository,Service DAO都被正確註釋並通過Web工作。但是當我嘗試通過我的服務做同樣的工作時。我爲自動裝配對象獲得NullPointerExceptions。獲取NullPointerException異常訪問webService。我如何解決這個問題

以下是一個例外。請在評論中幫助並通過您的想法。

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

請在PersonServiceImpl.java中添加代碼 – 2012-01-29 15:02:54

+0

添加了Dao和Service類。 – 2012-01-29 15:18:47

回答

0

請參閱Section 4.9, Annotation-based container configuration,在Spring Reference中。

最重要的一點是說明第4.9.1節之前吧,引用:

<context:annotation-config/>只查找在同一個應用程序上下文豆定義它的註解。這意味着,如果您將<context:annotation-config/>置於DispatcherServletWebApplicationContext中,則它只會檢查控制器中的@Autowired beans,而不是您的服務。有關更多信息,請參閱Section 16.2, 「The DispatcherServlet」

這很可能是您的@Service -annated類沒有被掃描;請嘗試:

<context:component-scan base-package="your.service.package" /> 
+0

我已匯入的applicationContext文件我的服務上下文文件 <進口資源=「類路徑:服務器端的服務-context.xml的」 /> 和服務方面的文件,我掃描我的服務,如 2012-01-29 15:47:24

+0

@AqifHamid嗯。啓動日誌中沒有任何內容?通過在DEBUG上進行日誌記錄,您是否看到正在掃描的組件和已識別的bean? – 2012-01-29 16:02:40

+0

是的,它正在創建初始化bean。(這是通過部署它來通過web運行服務器應用程序時完成的) – 2012-01-29 16:35:50

0

春天依賴注入只能由Spring管理組件。如果您的班級不是由Spring管理的,@Autowired將不起作用。檢查它是否被聲明爲Spring bean(使用<bean>或註解)。

+0

請檢查我的服務課程。我編輯了主要帖子。我怎樣才能讓我的JAX-WS服務類由Spring管理。 – 2012-01-29 15:19:28

+0

++我的所有類都被註釋爲Spring組件,並且在通過webControllers進行部署和運行時它們運行良好。通過本地主機。 – 2012-01-29 15:22:54

+0

請檢查我的意見 – 2012-01-29 15:48:49