SpringBoot項目使用 axis 調用webservice接口的實踐記錄

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

  • 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接口內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: