irpas技术客

使用axis调用WebService,Java WebService调用工具类_micromaple

网络投稿 6127

文章目录 WebService 简介概述 使用 axis 调用 WebService引入依赖WebService 调用工具类

WebService 简介 概述

能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。依据 WebService 规范实施的应用之间,无论它们所使用的语言、平台或内部协议是什么,都可以相互交换数据。

也就是说可以实现多语言、跨平台数据交互。

使用 axis 调用 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 调用工具类 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 { // 接口调用地址 private static String url = "http://127.0.0.1:8080/webservice.asmx"; // 命名空间 private static String namespace = "http://tempuri.org/"; /** * WebService - 调用接口 * * @param methodName 函数名 * @param params 参数 * @param clazz 返回对象class * @return 返回结果(Object) */ public static <T> T call(String methodName, Map<String, String> params, Class<T> clazz) { // log.info("调用 WebService 发送参数==>" + 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)); // 添加参数 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))); // 设置输出的类 call.setReturnClass(clazz); // 接口返回结果 T result = (T) call.invoke(parameterList.toArray()); log.info("调用 WebService 接口返回===>" + result); return result; } catch (Exception e) { log.error("调用 WebService 接口错误信息==>" + e.getMessage()); } return null; } /** * WebService - 接口调用 * * @param methodName 函数名 * @param params 参数 * @return 返回结果(String) */ public static String call(String methodName, Map<String, String> params) { // log.info("调用 WebService 发送参数==>" + 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)); // 添加参数 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); // 设置返回类型 call.setReturnType(new QName(namespace, methodName), String.class); // 接口返回结果 String result = (String) call.invoke(parameterList.toArray()); log.info("调用 WebService 接口返回===>" + result); return result; } catch (Exception e) { log.error("调用 WebService 接口错误信息==>" + e.getMessage()); } return null; } /** * WebService - 调用接口 * * @param methodName 函数名 * @param params 参数 * @return 返回结果(String) */ public static String call2(String methodName, Map<String, String> params) { // log.info("调用 WebService 发送参数==>" + 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)); // 添加参数 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); // 设置返回类型 call.setReturnType(XMLType.XSD_SCHEMA); // 接口返回结果 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("调用 WebService 接口返回===>" + result); return result; } catch (Exception e) { log.error("调用 WebService 接口错误信息==>" + e.getMessage()); } return null; } } 第一个方法为返回对象的方式,区别在于需要定义返回对象,属性值需要跟 WebService 中的返回对象保持一致。第二个方法适用于调用 WebService后,返回的值为 String 类型。

参数详解:

methodName:函数名。需要调用的 WebService 的函数名称。

params:参数。调用 WebService 时需传入的参数。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #JAVA #WebService调用工具类 #调用WebService工具类 #导入即使用