1. 程式人生 > >利用wsdl地址生成java客戶端呼叫類並實現動態配置的方法

利用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>

相關推薦

利用wsdl地址生成java客戶呼叫實現動態配置方法

前言:        有時,我們經常要和一些外部系統對接,如果是HTTP介面還好,直接用apache的HttpClient工具類呼叫即可。而如果對方系統是Webservice,則比較麻煩,本文主要講解如何用對方的wsdl地址生成java客戶端呼叫類並且動態配置訪問地址並在ja

webService 根據wsdl地址生成java客戶程式碼

1、配置java環境變數 JAVA_HOME,classpath,path都要設定 2、cmd 開啟命令視窗  執行  wsimport -s E: -p com.zrt.portal.replay ht

利用wsdl檔案生成webservice客戶程式碼

   有時候我們java在呼叫第三方系統時,如java呼叫.net時我們使用 org.apache.axis.client.Call類呼叫第三方系統時如下這種的可能不好呼叫對方介面Service service = new Service(); Call call =

wsdl地址生成Java客戶程式碼。

在jdk的bin目錄下有一個wsimport.exe的工具,使用該工具可以根據wsdl地址生成Java的客戶端程式碼。 常用命令如下: wsimport  -keep -d d:\ -s d:\src -p com.map -verbose http://192.168.1.33:9003/Map/V2

使用Myeclipse外掛將wsdl生成java客戶程式碼

使用環境:MyEclipse9.0 本教程使用Myeclipse內建外掛生成java程式碼,網上說這是xfire外掛,不管怎樣,生成和呼叫客戶端程式碼都十分簡單。 1.在專案上右鍵,選擇New->Other->Web Service->Web Servi

使用axis2,根據WSDL生成java客戶程式碼

2、下載解壓在D:\Work_Program_Files目錄;在D:\Work_Program_Files\axis2-1.6.2\bin目錄有一個wsdl2java.bat檔案; 3、設定環境變數,加入AXIS2_HOME=<Axis2客戶端安裝目錄>,pa

Java與WCF互動(一 Java客戶呼叫WCF服務

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

java客戶呼叫zookeeper

1、引入pom依賴 <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.10</vers

如何在Java客戶呼叫RESTful服務

在這個例子中,我們將看到如何使用java.net包實用工具,建立一個訪問REST服務RESTful的客戶端。當然這不是建立一個RESTful客戶端最簡單的方法,因為你必須自己讀取伺服器端的響應,以及Json和Java物件的轉換。 請求Get public class JavaNetURLRESTFulCl

Elasticsearch搜尋引擎第十四篇-Java客戶呼叫

文章目錄 ES支援多種程式語言客戶端 ES 提供的客戶端連線方式 Java REST Client Java Low Level REST Client Java High Level REST Client(常用) J

java客戶呼叫印表機

這種方式的問題就是 你的專案如果打包部署到雲服務上面  那就直接gg了 樓主的問題環境是:pdf內容已經在後臺用itextpdf已經畫好了,所以我想要達到的目的僅僅就是在瀏覽器端呼叫印表機直接列印就好了 在這中間嘗試了一些js外掛 但是都需要在頁面重新畫,但是我已經在

使用java客戶呼叫redis

Redis支援很多程式語言的客戶端,有C、C#、C++、Clojure、Common Lisp、Erlang、Go、Lua、Objective-C、PHP、Ruby、Scala,甚至更時髦的Node.js,當然,更少不了Java的客戶端支援。Redis官方列出的Java客戶端也有少,有Jedis、JRedi

java客戶呼叫 https 的webservice

證書 以 coremail 的伺服器為例 私鑰 /home/coremail/conf/server 公鑰 /home/coremail/conf/server.crt Webservice JAVA 客戶端 1. 新增新的金鑰庫 > cd $JA

JAVA客戶呼叫遠端WebService服務示例

/** * 呼叫WebService服務測試 */ public class ParseJsonDataTest { private static final String CAPE_WSDL_ADDRESS = "http://XXXX/XXXX?

java客戶呼叫webservice

         最近的工作是java和c++的互動,利用的就是webservice;部落格中介紹瞭如何利用java生成webservice,這篇部落格接著說如何利用java呼叫webservice。 

Java客戶呼叫WebService介面

Java呼叫webservice介面,基本套路都是相同的,非常簡單,我這裡使用的是axis包呼叫webservice. 首先引入標頭檔案 import javax.xml.namespace.QName; import org.apache.axis.client.Call

cxf生成java客戶 webservice

一、先到cxf官網上下載cxf客戶端 二、如何使用 a、解壓後的目錄: b、使用win+r鍵喚出執行視窗: c、輸入cmd命令回車彈出命令視窗(注意:用cd命令進入到

swagger-codegen生成java客戶程式碼(其他語言類似)

<dependency>   <groupId>io.swagger</groupId>   <artifactId>swagger-jaxrs</artifactId>   <version>1.5.9</version>

asp.net使用WSDL地址生成cs檔案(代理的自動生成

之所以寫這篇文章,是因為現公司在與外部專案對接時使用WSDL對接。 然而VS2010之前的版本都能在VS工具欄內找到自帶的wsdl工具的使用。而我恰好使用的vs2017,沒有這個工具,並且對接的wsdl帶了賬號密碼的驗證。Google了老半天,也沒找出需要帶賬號密碼驗證

Oracle客戶的安裝與遠端連線配置方法分享

一、Oracle客戶端與伺服器端的通訊機制     1、OracleNet協議    如下圖所示,Oracle通過Oracle Net協議實現客戶端與伺服器端的連線以及資料傳遞。OracleNet是同時駐留在Oracle資料庫伺服器端和客戶端上的一個軟體層,它封裝了TCP/IP協議,負責建立與維護客戶