JAVA調用.NET WebService終極方案(包含對SoapHeader的處理)


一、前言:
     今日部門的產品需要用到短信功能,需要走公司統一的接口,而該短信接口是由.net開發的,利用兩天時間徹底搞定了用java來調用.net 的web service,包括對soap header的處理。
二、解決方案
     查詢了下java中對soap的支持,有幾種方案,有axis和xfire等,我這里先選擇的是axis的1.4版本,隨即開始開發,這里面有個大坑啊。就是java對類的屬性中的getXXXX方法解析后生成的xml文件的屬性首字母是小寫的,與.NET的生成的xml對不上,光這個問題耗費了很長的時間,最后依然決定用axis2來做,用了不到2個小時全部搞定。
三、遇到了問題怎么辦?
     在使用axis1.4的過程中,遇到這樣的那樣的問題,我認為最大的問題在於用axis生成的xml文件與.net的不一致,所以才會有這樣那樣的問題,我的辦法是,安裝一個wireshark進行抓包,然后比對看看哪些屬性生成的不對這樣再去改代碼,事半功倍。關於wireshark的用法大家可以去google。
     對於用axis的方案大家直接用axis2就好了,去官方下載一個,如果不清楚包的結構,直接把lib下的所有jar包都引進去吧。免得一個一個的引。
四、過程
     前面說到了,需要認真看.net返回的xml文件,如果某個方法存在soap:Header的話,那么在java端就需要構造header,有可能不同的方法對應不同的header,這個需要看清楚了。
     不說了,直接上過程及代碼。
     1.下載axis2,這個是必須的,官方下載吧,然后解壓
     2.打開命令控制台窗口,進入bin目錄,執行命令:wsdl2java.bat -uri  http://www.baidu.com/sample.asmx?wsdl    看到紅色的參數部分了吧,這個必須有。 
     3.之后會在bin目錄下生成一個src目錄,將生成的兩個類拷貝到項目中。
     4.然后,那就是基本上和.net引用.net的web service一樣一樣的了。
     OK,下面只給出一個例子,包含header頭、傳遞復雜類型及接收返回值
        
ServiceStub stub = new ServiceStub();  //這個是生成的類,可能你的類名和我的是不一樣的
            stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);
             //加入頭部驗證
              WebSoapHeadE headerE=new WebSoapHeadE();//這里的生成的類可能和你的也不同
            WebSoapHead header=new WebSoapHead();//這個header即是.net的web service的header頭
             header.set.........//這里執行一些屬性賦值操作,一般包括用戶名和密碼之類
            headerE.setWebSoapHead(header); //需要將該頭加進去

  

             
         好了到這里我們的頭信息就構造完畢了,這里只是構造好了,需要到下面執行某個接口方法的時候把該頭傳遞進去。
          再看傳遞自定義對象
          比如我這里的這個發短信的業務,生成的方法為sendSms(自定義對象,頭信息);
            好的這里我們需要構造這個自定義對象,原.net的sendSms方法的參數為一個自定義對象的數組,那么這里我們該怎么寫呢?
              axis為我們提供了一個類似ArrayOfXXXX的包裝對象,構造這個對象然后將xxxx對象加進去即可。
     到這里,我們基本完成了調用.net webservice的所有工作。
          希望這篇文章能給你帶來幫助。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM