首頁 > 軟體

SpringBoot專案使用 axis 呼叫webservice介面的實踐記錄

2022-06-16 18:01:41

實際工作場景中會存在對接去很多系統的資料的任務,資料對接呢 方式很多吧,接觸過 :

  • http| https請求
  • 資料庫檢視
  • 資料庫儲存過程
  • soap+xml工單...

然後這兩天接到一個關於webservice 資料介面的方式對接,說實話對於這個一臉懵逼,完全不知道是啥(聽一個比較年長的大哥說一些比較老的系統中喜歡使用這個進行資料對接)。所以只能學習一下然後進行搞了

WebService

定義

個人理解

通過度娘等方式,個人理解為變相的soap協定加xml工單處理,

實踐

webservice 常識

一個webservice 介面釋出地址往往類似:

  • qq 線上驗證介面:

www.webxml.com.cn/webservices…

  • 其他可測試介面:

email電子郵箱地址介面: www.webxml.com.cn/WebServices…

全國天氣情況介面:

www.webxml.com.cn/WebServices…

qq線上介面驗證介面為例

在介面後面加:/wsdl www.webxml.com.cn/webservices…

存取檢視然後找到下圖中定義的內容:注意使用關聯key找到對應的必要使用的引數。

maven 使用 axis

應用依賴(不可缺失必須)

        <!-- https://mvnrepository.com/artifact/org.apache.axis/axis -->
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/wsdl4j/wsdl4j -->
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.6.2</version>
        </dependency>
<!--        解決cell 轉換問題-->
        <!-- https://mvnrepository.com/artifact/javax.xml/jaxrpc-api -->
        <dependency>
            <groupId>javax.xml</groupId>
            <artifactId>jaxrpc-api</artifactId>
            <version>1.1</version>
        </dependency>
<!--       解析呼叫結果以及資料轉換包-->
        <!-- https://mvnrepository.com/artifact/commons-discovery/commons-discovery -->
        <dependency>
            <groupId>commons-discovery</groupId>
            <artifactId>commons-discovery</artifactId>
            <version>0.2</version>
        </dependency>

程式碼(貼上可用)

@Test
public void testWebService() {
    try {
        //wsdl地址
        String endpoint = "http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx";
        //名稱空間
        String namespace = "http://WebXml.com.cn/";
        //服務名
        String serviceName = "qqOnlineWebService";
        //方法名
        String methodName = "qqCheckOnline";
        //soapAction
        String soapAction = "http://WebXml.com.cn/qqCheckOnline";

        Service service = new Service();
        Call call = (Call) service.createCall();
        //設定響應超時
        call.setTimeout(3000);
        //設定地址
        call.setTargetEndpointAddress(new java.net.URL(endpoint));
        //設定方法名
        call.setOperationName(new QName(namespace, methodName));

        //設定引數
        call.addParameter(new QName(namespace, "qqCode")
                , org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
        //設定返回型別
        call.setReturnType(XMLType.XSD_SCHEMA);
        //啟用soap
        call.setUseSOAPAction(true);
        //設定soapAction
        call.setSOAPActionURI(soapAction);
        //設定服務名
        SOAPService soapService = new SOAPService();
        soapService.setName(serviceName);
        call.setSOAPService(soapService);
        Schema result = (Schema) call.invoke(new Object[]{"xxxxx"});
        for (int i = 0; i < result.get_any().length; i++) {
            System.out.println(result.get_any()[i]);
        }
    } catch (Exception e) {
        log.error("ddd", e);
    }
}

對於以上程式碼,我這邊吐槽一下,網上其實很多這個的例子但是實際呼叫的時候會出問題,注意點:

  • 設定引數

  • 獲取結果

xxxx需要填寫真實的QQ號碼

到此這篇關於SpringBoot專案使用 axis 呼叫webservice介面的文章就介紹到這了,更多相關SpringBoot呼叫webservice介面內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com