如何使用axis調(diào)用WebService及Java?WebService調(diào)用工具類
WebService 簡介
概述
能使得運行在不同機器上的不同應(yīng)用無須借助附加的、專門的第三方軟件或硬件,就可相互交換數(shù)據(jù)或集成。依據(jù) WebService
規(guī)范實施的應(yīng)用之間,無論它們所使用的語言、平臺或內(nèi)部協(xié)議是什么,都可以相互交換數(shù)據(jù)。
也就是說可以實現(xiàn)多語言、跨平臺數(shù)據(jù)交互。
使用 axis 調(diào)用 WebService
引入依賴
pom.xml 依賴如下:
<dependency> <groupId>org.apache.axis</groupId> <artifactId>axis</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>org.apache.axis</groupId> <artifactId>axis-jaxrpc</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>axis</groupId> <artifactId>axis-wsdl4j</artifactId> <version>1.5.1</version> </dependency> <dependency> <groupId>commons-discovery</groupId> <artifactId>commons-discovery</artifactId> <version>0.2</version> </dependency>
WebService 調(diào)用工具類
package com.micromaple.common.utils; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import org.apache.axis.encoding.ser.BeanDeserializerFactory; import org.apache.axis.encoding.ser.BeanSerializerFactory; import org.apache.axis.message.SOAPHeaderElement; import org.apache.axis.types.Schema; import org.apache.commons.collections.MapUtils; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import java.util.List; import java.util.Map; import java.util.Set; /** * WebService - 工具類 * Title: WebServiceUtils * Description: * * @author Micromaple * @version 1.0.0 * @date 2022/7/1 12:14 */ @Slf4j public class WebServiceUtils { // 接口調(diào)用地址 private static String url = "http://127.0.0.1:8080/webservice.asmx"; // 命名空間 private static String namespace = "http://tempuri.org/"; /** * WebService - 調(diào)用接口 * * @param methodName 函數(shù)名 * @param params 參數(shù) * @param clazz 返回對象class * @return 返回結(jié)果(Object) */ public static <T> T call(String methodName, Map<String, String> params, Class<T> clazz) { // log.info("調(diào)用 WebService 發(fā)送參數(shù)==>" + MapperUtils.mapToJson(params)); String soapActionURI = namespace + methodName; try { Service service = new Service(); SOAPHeaderElement header = new SOAPHeaderElement(namespace, methodName); header.setNamespaceURI(namespace); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(url); call.setOperationName(new QName(namespace, methodName)); // 添加參數(shù) List<String> parameterList = Lists.newArrayList(); if (params != null) { Set<String> paramsKey = params.keySet(); for (String key : paramsKey) { call.addParameter(new QName(namespace, key), XMLType.XSD_STRING, ParameterMode.IN); String pValue = MapUtils.getString(params, key); header.addChildElement(key).setValue(pValue); parameterList.add(pValue); } } call.setUseSOAPAction(true); call.setSOAPActionURI(soapActionURI); call.addHeader(header); // 進行序列化 實體類也要序列化 implements Serializable call.registerTypeMapping(clazz, new QName(namespace, soapActionURI), new BeanSerializerFactory(clazz, new QName(namespace, soapActionURI)), new BeanDeserializerFactory(clazz, new QName(namespace, soapActionURI))); // 設(shè)置輸出的類 call.setReturnClass(clazz); // 接口返回結(jié)果 T result = (T) call.invoke(parameterList.toArray()); log.info("調(diào)用 WebService 接口返回===>" + result); return result; } catch (Exception e) { log.error("調(diào)用 WebService 接口錯誤信息==>" + e.getMessage()); } return null; } /** * WebService - 接口調(diào)用 * * @param methodName 函數(shù)名 * @param params 參數(shù) * @return 返回結(jié)果(String) */ public static String call(String methodName, Map<String, String> params) { // log.info("調(diào)用 WebService 發(fā)送參數(shù)==>" + MapperUtils.mapToJson(params)); String soapActionURI = namespace + methodName; try { Service service = new Service(); SOAPHeaderElement header = new SOAPHeaderElement(namespace, methodName); header.setNamespaceURI(namespace); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(url); call.setOperationName(new QName(namespace, methodName)); // 添加參數(shù) List<String> parameterList = Lists.newArrayList(); if (params != null) { Set<String> paramsKey = params.keySet(); for (String key : paramsKey) { call.addParameter(new QName(namespace, key), XMLType.XSD_STRING, ParameterMode.IN); String pValue = MapUtils.getString(params, key); header.addChildElement(key).setValue(pValue); parameterList.add(pValue); } } call.setUseSOAPAction(true); call.setSOAPActionURI(soapActionURI); call.addHeader(header); // 設(shè)置返回類型 call.setReturnType(new QName(namespace, methodName), String.class); // 接口返回結(jié)果 String result = (String) call.invoke(parameterList.toArray()); log.info("調(diào)用 WebService 接口返回===>" + result); return result; } catch (Exception e) { log.error("調(diào)用 WebService 接口錯誤信息==>" + e.getMessage()); } return null; } /** * WebService - 調(diào)用接口 * * @param methodName 函數(shù)名 * @param params 參數(shù) * @return 返回結(jié)果(String) */ public static String call2(String methodName, Map<String, String> params) { // log.info("調(diào)用 WebService 發(fā)送參數(shù)==>" + MapperUtils.mapToJson(params)); String soapActionURI = namespace + methodName; try { Service service = new Service(); SOAPHeaderElement header = new SOAPHeaderElement(namespace, methodName); header.setNamespaceURI(namespace); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(url); call.setOperationName(new QName(namespace, methodName)); // 添加參數(shù) List<String> parameterList = Lists.newArrayList(); if (params != null) { Set<String> paramsKey = params.keySet(); for (String key : paramsKey) { call.addParameter(new QName(namespace, key), XMLType.XSD_STRING, ParameterMode.IN); String pValue = MapUtils.getString(params, key); header.addChildElement(key).setValue(pValue); parameterList.add(pValue); } } call.setUseSOAPAction(true); call.setSOAPActionURI(soapActionURI); call.addHeader(header); // 設(shè)置返回類型 call.setReturnType(XMLType.XSD_SCHEMA); // 接口返回結(jié)果 Schema schemaResult = (Schema)call.invoke(parameterList.toArray()); String result = ""; for(int i = 0; i<schemaResult.get_any().length; i++){ result = result + schemaResult.get_any()[i]; } log.error("調(diào)用 WebService 接口返回===>" + result); return result; } catch (Exception e) { log.error("調(diào)用 WebService 接口錯誤信息==>" + e.getMessage()); } return null; } }
- 第一個方法為返回對象的方式,區(qū)別在于需要定義返回對象,屬性值需要跟
WebService
中的返回對象保持一致。 - 第二個方法適用于調(diào)用
WebService
后,返回的值為String
類型。
參數(shù)詳解:
methodName
:函數(shù)名。需要調(diào)用的WebService
的函數(shù)名稱。params
:參數(shù)。調(diào)用WebService
時需傳入的參數(shù)。
總結(jié)
到此這篇關(guān)于如何使用axis調(diào)用WebService及Java WebService調(diào)用工具類的文章就介紹到這了,更多相關(guān)axis調(diào)用WebService內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
eclipse springboot工程打war包方法及再Tomcat中運行的方法
這篇文章主要介紹了eclipse springboot工程打war包方法及再Tomcat中運行的方法,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-08-08關(guān)于通過Java連接mysql對反斜杠”\“轉(zhuǎn)義的測試詳解
這篇文章主要給大家介紹了關(guān)于通過Java連接mysql對反斜杠”\“轉(zhuǎn)義的測試的相關(guān)資料,文中通過實例代碼介紹的非常詳細,對大家理解反斜杠”\“轉(zhuǎn)義具有一定的參考學習價值,需要的朋友們下面來一起看看吧。2017-06-06使用java實現(xiàn)備份和恢復SQLServer表數(shù)據(jù)
這篇文章主要為大家詳細介紹了如何使用java實現(xiàn)備份和恢復SQLServer表數(shù)據(jù),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下2024-01-01Java實現(xiàn)企業(yè)微信回調(diào)配置的詳細步驟與測試
這篇文章主要給大家介紹了關(guān)于Java實現(xiàn)企業(yè)微信回調(diào)配置的詳細步驟與測試,企業(yè)微信回調(diào)是指企業(yè)微信通過HTTP?POST請求將業(yè)務(wù)數(shù)據(jù)回調(diào)到指定的URL上,文中給出了詳細的代碼示例,需要的朋友可以參考下2023-09-09