Bug它只會讓你更強大!
在速運快遞項目前端頁面用戶註冊的時候,點擊註冊之後總是報空指針異常,我當時一直想的是我前端頁面封裝model失敗了嗎?但是根本沒有想到是CustomerService是null.
針對這個問題,我的解決辦法如下:
1、前端debug,看看請求參數是否正確
F12,點擊註冊之後,看到瀏覽器響應碼為200,由於是post請求,請求參數體正確。但是後台就報空指針。很明顯,是後台程序的問題。
2、後端debug
在開啟debug模式之後,我在CustomerAction的singUpCustomerService.save(model)方法前打了斷點,點擊註冊按鈕之後,進入debug模式,在點擊F5進入 CustomerService.save(model)方法中,走完這一步,我在debug界面右上看到了所有參數的值,這時候才發現原來不是model為null,
而是CustomerService為null。
在速運快遞項目前端頁面用戶註冊的時候,點擊註冊之後總是報空指針異常,我當時一直想的是我前端頁面封裝model失敗了嗎?但是根本沒有想到是CustomerService是null.
針對這個問題,我的解決辦法如下:
1、前端debug,看看請求參數是否正確
F12,點擊註冊之後,看到瀏覽器響應碼為200,由於是post請求,請求參數體正確。但是後台就報空指針。很明顯,是後台程序的問題。
2、後端debug
在開啟debug模式之後,我在CustomerAction的singUpCustomerService.save(model)方法前打了斷點,點擊註冊按鈕之後,進入debug模式,在點擊F5進入 CustomerService.save(model)方法中,走完這一步,我在debug界面右上看到了所有參數的值,這時候才發現原來不是model為null,
而是CustomerService為null。
CustomerService
獲取更多Bug資料:672899761(行業大牛解答)Customer
為什麼CustomerService為null呢?思前想後不得其解,因為我是在crm項目寫的CustomerService和CustomerServiceImpl,最後通過webService發布的。我當時以為是我wsimport下載完webService代碼之後沒有更新項目的原因。在更新maven,install之後,運行之後還是會出現空指針異常。
3、最後思路只能是spring配置文件了,經過查找,問題就在這裡!
以下是我最初配置的spring配置文件:因為bos_fore項目只有web層,因此就大意只配置了webService服務代理對象,而忽略了spring註解的掃描包的配置。
<jaxws:client id="customerClient"
address="http://localhost:8888/bos_crm/service/customer"
serviceClass="cn.baidu.cxf.service.CustomerService">
</jaxws:client>
正確配置應該加上:
<!--配置註解的掃描包 -->
<context:component-scan base-package="cn.baidu.customer.action"></context:component-scan>
問題解決:因為我們把Action的創建交給了spring接管,所以配置spring掃描包這件事一定不能省略。不然配置的Autowired就不能成功,即不能給CustomerService注入。
之所以能進入Action方法中是因為web.xml中配置的攔截器,只要配置了攔截器,只要訪問路徑成功就能進入action內部。而注入成功與否是靠註解或者set方法。
CustomerService
獲取更多Bug資料:672899761(行業大牛解答)
Customer
為什麼CustomerService為null呢?思前想後不得其解,因為我是在crm項目寫的CustomerService和CustomerServiceImpl,最後通過webService發布的。我當時以為是我wsimport下載完webService代碼之後沒有更新項目的原因。在更新maven,install之後,運行之後還是會出現空指針異常。
3、最後思路只能是spring配置文件了,經過查找,問題就在這裡!
以下是我最初配置的spring配置文件:因為bos_fore項目只有web層,因此就大意只配置了webService服務代理對象,而忽略了spring註解的掃描包的配置。
<jaxws:client id="customerClient"
address="http://localhost:8888/bos_crm/service/customer"
serviceClass="cn.baidu.cxf.service.CustomerService">
</jaxws:client>
正確配置應該加上:
<!--配置註解的掃描包 -->
<context:component-scan base-package="cn.baidu.customer.action"></context:component-scan>
問題解決:因為我們把Action的創建交給了spring接管,所以配置spring掃描包這件事一定不能省略。不然配置的Autowired就不能成功,即不能給CustomerService注入。
之所以能進入Action方法中是因為web.xml中配置的攔截器,只要配置了攔截器,只要訪問路徑成功就能進入action內部。而注入成功與否是靠註解或者set方法。
- 工作1-5年,感覺自己技術不行,想提升的
- 沒有工作經驗,但基礎非常紮實,想提升自己技術的。
- 還有就是想一起交流學習的。
- 工作遇到瓶頸了,想進階突破自己的。
- 小號一律不給過,謝謝。
- 學習交流群:672899761 備註好信息
推薦閱讀:
※軟體測試工程師的職責和10大城市薪資對比
※恭喜正厚邵同學,從開發轉行測試,薪資翻倍。
※Testner創始人Sea:軟體測試行業人才數量供不應求?