使用cmd根據WSDL網址生成java客戶端代碼的實現
windows下使用cmd命令提示符生成java webservice客戶端代碼,可以使用命令提示符直接生成客戶端代碼,直接導入到項目中,隻需配置jdk即可,在jdk的bin文件夾下,按Shift並點擊右鍵,選中“在此處打開命令窗口”
輸入命令如下:
wsimport -keep -p com.demo.client -d D:\\(存放的地址) http://XX/Account?wsdl(wsdl地址)
命令參數說明:
-d:生成客戶端執行類的class文件的存放目錄(默認存放在C:\Users\Administrator\)
-s:生成客戶端執行類的源文件的存放目錄(默認存放在C:\Users\Administrator\)
-p:定義生成類的包名
圖示:
上面代碼是在D盤下生成java代碼,-d代表的是生成class文件和java文件,圖示:
如果把這裡的-d改為-s,生成的隻有java文件,圖示:
文件裡面包名都是我們可以指定的,如果沒有指定,使用的就是根據WSDL文檔裡面的targetNamespace來命名。
共勉:這個時代會犒賞那些愛學習的人。
補充:利用wsdl地址生成java客戶端調用類並實現動態配置的方法
前言:
有時,我們經常要和一些外部系統對接,如果是HTTP接口還好,直接用apache的HttpClient工具類調用即可。而如果對方系統是Webservice,則比較麻煩,本文主要講解如何用對方的wsdl地址生成java客戶端調用類並且動態配置訪問地址並在java中使用
1,首先我們先要獲取對方的wsdl地址,例如
http://xxxx/xxxx/xxxx.asmx?wsdl
2, 接著,在cxf官網上下載apache-cxf-3.2.5
2.1,將apache-cxf-3.2.5解壓縮後安裝在D:\\apache-cxf-3.2.5中,設置CXF_HOME環境變量為D:\\ apache-cxf-3.2.5
如下圖所示:
2.2,運行cmd,執行命令wsdl2java,等待大概1秒鐘,出現USAGE證明設置成功
2.3,用wsdl地址執行命令:其中-d代表輸出路徑,後面緊跟著路徑,路徑後面緊跟著地址,按回車鍵,生成成功!
3,生成成功後
由於wsdl是寫死在生成的java類的註解中的,有時我們會使用多套環境進行測試,驗證,而sit和uat環境的wsdl地址是不盡相同的。此時,我們需要動態配置wsdl的地址和命名空間的地址
@Component public class DebitPushClient implements InitializingBean { private static URL wsdlUrl; private static String debitWsdlUrl; private static String uri; private static QName SERVICE_NAME; public static HttpResult pushDebitData(String jsonData) { FinancialSharing ss = new FinancialSharing(wsdlUrl, SERVICE_NAME); return (HttpResult) WebServiceClientUtil.invokeWebServiceSoapAction(ss, new QName(uri, "FinancialSharingSoap12"), FinancialSharingSoap.class, "pushDebitData", jsonData); } /** * 初始化wsdl連接地址 */ private void initWsdlUrl() { URL url = null; try { wsdlUrl = new URL(debitWsdlUrl); } catch (MalformedURLException e) { java.util.logging.Logger.getLogger(FinancialSharing.class.getName()) .log(java.util.logging.Level.INFO, "Can not initialize the default wsdl from {}", debitWsdlUrl); } } /** * 從配置文件中讀取wsdl地址 * @param debitWsdlUrl 地址 */ @Value("${my.dfdk.wsdl.url:http://xxx.xxx.asmx?wsdl}") public void setDebitWsdlUrl(String debitWsdlUrl) { DebitPushClient.debitWsdlUrl = debitWsdlUrl; } /** * 從配置文件中讀取命名空間地址 * @param uri 命名空間地址 */ @Value("${my.dfdk.wsdl.namespace.uri:http://tempuri.org/}") public void setUri(String uri) { DebitPushClient.uri = uri; } /** * 初始化wsdl * @throws Exception */ @Override public void afterPropertiesSet() throws Exception { initWsdlUrl(); SERVICE_NAME = new QName(uri, "FinancialSharing"); } }
4,客戶端調用,調用成功後,即可獲取正確的響應結果,不需要再將xml轉成java對象
這篇文章,隻是簡單介紹瞭用wsdl地址生成java客戶端調用代碼的一種方法,除此之外,還可以用maven plugin
cxf-codegen-plugin
生成
<build> <finalName>cxf-date</finalName> <plugins> <plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin</artifactId> <version>${cxf.version}</version> <executions> <execution> <id>generate-sources</id> <phase>generate-sources</phase> <configuration> <sourceRoot>src/main/resources/cxf</sourceRoot> <wsdlOptions> <wsdlOption> <wsdl>http://localhost:8080/cxf-date/services/BookService?wsdl</wsdl> <frontEnd>jaxws21</frontEnd> <faultSerialVersionUID>1</faultSerialVersionUID> </wsdlOption> </wsdlOptions> </configuration> <goals> <goal>wsdl2java</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。如有錯誤或未考慮完全的地方,望不吝賜教。
推薦閱讀:
- None Found