文章目录

  • 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 Serializablecall.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 时需传入的参数。

使用axis调用WebService,Java WebService调用工具类相关推荐

  1. .NET WebApi调用微信接口Https请求工具类

    .NET WebApi调用微信接口Https请求工具类 using System; using System.Collections.Generic; using System.IO; using S ...

  2. java轻量级并行工具类_16 个超级实用的 Java 工具类

    原标题:16 个超级实用的 Java 工具类 源 /juejin 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名, ...

  3. Java导入Excel工具类使用教程

    前言: 本工具类提供了Excel导入功能,通过反射机制将Excel中数据映射到实体类中,从而获取Excel数据,工具类依赖org.apache.poi包.支持RESTful API,支持Spring ...

  4. Java使用hutool工具类发送http请求

    Java使用hutool工具类发送网络请求 引入jar包 pom.xml添加以下hutool依赖 <dependency><groupId>cn.hutool</grou ...

  5. Java封装OkHttp3工具类

    点击关注公众号,Java干货及时送达  作者:如漩涡 https://blog.csdn.net/m0_37701381 Java封装OkHttp3工具类,适用于Java后端开发者 说实在话,用过挺多 ...

  6. UrlUtils工具类,Java URL工具类,Java URL链接工具类

    UrlUtils工具类,Java URL工具类,Java URL链接工具类 >>>>>>>>>>>>>>>&g ...

  7. java时间日期工具类_java日期处理工具类

    java日期处理工具类 import java.text.DecimalFormat; import java.text.ParsePosition; import java.text.SimpleD ...

  8. java 日期处理工具类_Java日期处理工具类DateUtils详解

    本文实例为大家分享了Java日期处理工具类DateUtils的具体代码,供大家参考,具体内容如下 import java.sql.Timestamp; import java.text.ParseEx ...

  9. java downloadfile_FileDownload.java:文件下载工具类

    FileDownload.java:文件下载工具类 2017-04-25·Mr.Xia 4489 次浏览 文件下载功能的工具类 JavaWeb工具类目录 [http://baike.xsoftlab. ...

  10. java.util.zip 用法,Java压缩文件工具类ZipUtil使用方法代码示例

    本文实例通过Java的Zip输入输出流实现压缩和解压文件,前一部分代码实现获取文件路径,压缩文件名的更改等,具体如下: package com.utility.zip; import java.io. ...

最新文章

  1. 客快物流大数据项目(八):Docker的安装和启动
  2. 【廖雪峰python入门笔记】Unicode编码_UnicodeDecodeError处理
  3. Ubuntu 18启动失败 Started Hold until boot procss finishes up
  4. flink 8 state checkpoint savepoint区别
  5. BugKuCTF 杂项 隐写
  6. superset可视化-Time-series Percent Change
  7. 计算机中乘法是什么函数,c - 分解简单的C函数。 (在64位计算机中为128位乘法) - 堆栈内存溢出...
  8. 《深入理解 Spring Cloud 与微服务构建》第十五章 微服务监控 Spring Boot Admin
  9. C语言储蓄系统编程,C语言:银行储蓄系统的开发(初级)-Go语言中文社区
  10. ASP.NET MVC5+EF6+EasyUI 后台管理系统(28)-系统小结
  11. 恢复误删除的域用户及几个查询命令
  12. 手机图标ui设计尺寸:ui设计app图标尺寸规范
  13. x2检验(chi-square test)或称卡方检验
  14. mysql是个单用户数据库_MySQL是一个支持单用户的数据库管理系统 答案:×
  15. DISCUZ的数据字典3
  16. mysql 查询上一周每一天的数据(含跨年问题)
  17. 【C语言】自由落体第n次落地共经过多少米,第n次弹起的高度
  18. java mkdir 使用_Java File mkdir()用法及代码示例
  19. ucenter base.php,phpcms整合ucenter问题集
  20. 关于UBNT 8.5.1版本无法从有线端管理设备的bug

热门文章

  1. 公众号滑动图代码_微信公众号的代码块插入,及一键排版
  2. 微信发送模板消息返回data format error hint 47001
  3. python echarts接口_GitHub - jllan/pyecharts: Python Echarts Plotting Library
  4. Maven:mirror和repository区别
  5. 两独立样本率的非劣效性试验-样本量计算
  6. 安装和维护ImageJ
  7. 【Unity】用2D流体实现在水中添加染料的效果
  8. JAVA办公管理系统(OA)
  9. 某城郊110kV降压变电站监控系统设计
  10. Android下载自带开源图标库教程