分類  >  Web前端 >

Axis2+Spring開發時遇到Service注入為空的有關問題

tags:    時間:2013-12-10 01:03:19
Axis2+Spring開發時遇到Service注入為空的問題
需求:在SSI項目中使用Axis2的WEBSERVICE技術。新建一個Axis2的服務類充當原項目中的ACTION。

問題描述:在創建了Axis2類之後,想直接使用@Resource,將Spring的Service類直接注入到Axis2類中,但發現直接報空。代碼如下:
配置類:server-config.wsdd
 <service name="test" provider="java:RPC">   <parameter name="allowedMethods" value="*"/>   <parameter name="className" value="com.webservice.ServerTest"/>  </service> 


服務JAVA類:ServerTest.java
 public class ServerTest {     @Resource     private TestService testService;     public String test(String name){	         return testService.toString();	     } } 

伺服器就這些,客戶端代碼就是貼出來了,客戶端訪問時,在第5行的地方直接報空指針,說明testService沒有注入成功。

增加說明:框架用的是SSI,在普通Action里,直接這樣寫是可以注入的。
 @Resource     private TestService testService;


後來查了下網上資料,說是:
由於本身這個實現方法是逆向生成的,並不是由spring進行管理的,所以使用注入的模式並不能得到結果,需要通過其他方式進行獲取。

-----------------------------------------------
所以修改下類ServerTest.java,如下:
 public class ServerTest {     private static WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();     TestService testService= (TestService)getContext().getBean("testService");     public String test(String name){	         return testService.toString();	     } } 

至此,問題解決。注意2、3行代碼。

-----------------------------------------------
總結:
1、使用Axis2的時候,用XML配置的方式,就可以了。
2、若要用ANNOTATION的方式,如我上述來獲取Bean,也是可以的。最好可以將context全局並靜態掉。
3、如果用CXF的話,似乎可以更好的與Spring結合起來。

4、對Axis2也只是到了會用或是解決下問題的地步,沒有深入研究下去,上述解決方式若有更好的方式,歡迎留言指正。

推薦閱讀文章

Bookmark the permalink ,來源:互聯網