JAVA WSIMPORT生成WEBSERVICE客戶端401認證過程圖解
概述
wsimport是jdk自帶的命令,可以根據wsdl文件生成客戶端中間程式碼,基於生成的程式碼編寫客戶端,可以省很多麻煩。
先看兩張截圖:
使用瀏覽器開啟webservice出現的介面:
使用wsimport生成webservice客戶端出現401錯誤:
需用到的命令引數如下:
1. -d <directory> 在指定的目錄生成class檔案
2. -p <pkg> 指定生成檔案的包結構
3. -Xauthfile <filepath> 在格式檔案進行授權資訊
4. -keep <url> 在生成class檔案,或者jar包時,同時保留java原始檔
第一步 建立wsimport生成ws命令列
wsimport -d D:\JAVA\wrokspace\您的專案\src -p com.xx.web -Xauthfile D:\JAVA\wrokspace\您的專案\authfile.txt -keep http://xxxx:9000/Service.asmx?wsdl
1、通過-d命令指定您的java專案src路徑
2、通過-p命令指定需生成包結構(指定之後會自動生成)
3、通過-Xauthfile命令指定訪問帶有401認證的webservice授權檔案(檔案路徑或檔名可以隨意更改 特別簡單,請放心)。
4、通過-keep命令指定webservice路徑
第二步 建立授權檔案(authfile.txt)
http://test:[email protected]:9000/Service.asmx?wsdl
第三步 在MyEclipse工具中找到對應的專案右鍵重新整理
備註:生成完成之後專案可能會出現錯誤,將錯誤稍作修改至沒有異常即可。
第四步 嘗試呼叫webservice介面函式並執行專案
出現了 Server returned HTTP response code: 401異常,雖然ws成功匯入到專案中了但是專案訪問介面的時候沒有進行身份認證導致出現該異常。我已經在論壇裡面找到這個方法的解決方案,
原連結(參考#10):http://bbs.csdn.net/topics/370023850
import java.net.Authenticator; import java.net.PasswordAuthentication; public class MyAuthenticator extends Authenticator { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("使用者名稱","密碼".toCharArray()); } }
呼叫的時候只需要在呼叫介面之前呼叫執行該方法即可:
Authenticator.setDefault(new MyAuthenticator());
終於搞定了
直接用HttpURLConnection是不行的,這個預設只是80埠。
最後是用 Java.Net的Authenticator類 把Username和Password直接投過去(他之後對位流的處理遵守http的basic身份驗證機制)
程式碼很短:
import java.net.Authenticator; import java.net.PasswordAuthentication; class MyAuthenticator extends Authenticator { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication ( "username ","password "); } }
在程式中呼叫:
Authenticator.setDefault (new MyAuthenticator ());
希望對以後碰到這個問題的人有用
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。