如何使用axis调用WebService及Java WebService调用工具类

WebService 简介

概述

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

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

使用 axis 调用 WebService

引入依赖

pom.XML 依赖如下:

  1. <dependency>
  2.      <groupId>org.apache.axis</groupId>
  3.      <artifactId>axis</artifactId>
  4.      <version>1.4</version>
  5. </dependency>
  6. <dependency>
  7.      <groupId>org.apache.axis</groupId>
  8.      <artifactId>axis-jaxrpc</artifactId>
  9.      <version>1.4</version>
  10. </dependency>
  11. <dependency>
  12.      <groupId>axis</groupId>
  13.      <artifactId>axis-wsdl4j</artifactId>
  14.      <version>1.5.1</version>
  15. </dependency>
  16. <dependency>
  17.      <groupId>commons-discovery</groupId>
  18.      <artifactId>commons-discovery</artifactId>
  19.      <version>0.2</version>
  20. </dependency>

WebService 调用工具类

  1. package com.micromaple.common.utils;
  2.  
  3. import com.google.common.collect.Lists;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.apache.axis.client.Call;
  6. import org.apache.axis.client.Service;
  7. import org.apache.axis.encoding.XMLType;
  8. import org.apache.axis.encoding.ser.BeanDeserializerFactory;
  9. import org.apache.axis.encoding.ser.BeanSerializerFactory;
  10. import org.apache.axis.message.SOAPHeaderElement;
  11. import org.apache.axis.types.Schema;
  12. import org.apache.commons.collections.MapUtils;
  13.  
  14. import Javax.xml.namespace.QName;
  15. import javax.xml.rpc.ParameterMode;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.Set;
  19.  
  20. /**
  21.      * WebService – 工具类
  22.      * Title: WebServiceUtils
  23.      * Description:
  24.      *
  25.      * @author Micromaple
  26.      * @version 1.0.0
  27.      * @date 2022/7/1 12:14
  28.      */
  29. @Slf4j
  30. public class WebServiceUtils {
  31.      // 接口调用地址
  32.      private static String url = “http://127.0.0.1:8080/webservice.asmx”;
  33.      // 命名空间
  34.      private static String namespace = “http://tempuri.org/”;
  35.      /**
  36.          * WebService – 调用接口
  37.          *
  38.          * @param methodName 函数名
  39.          * @param params 参数
  40.          * @param clazz 返回对象class
  41.          * @return 返回结果(Object)
  42.          */
  43.      public static <T> T call(String methodName, Map<String, String> params, Class<T> clazz) {
  44.          // log.info(“调用 WebService 发送参数==>” + MapperUtils.mapTojson(params));
  45.          String soapActionURI = namespace + methodName;
  46.          try {
  47.              Service service = new Service();
  48.  
  49.              SOAPHeaderElement header = new SOAPHeaderElement(namespace, methodName);
  50.              header.setNamespaceURI(namespace);
  51.  
  52.              Call call = (Call) service.createCall();
  53.              call.setTargetEndpointAddress(url);
  54.  
  55.              call.setOperationName(new QName(namespace, methodName));
  56.  
  57.              // 添加参数
  58.              List<String> parameterList = Lists.newArrayList();
  59.              if (params != null) {
  60.                  Set<String> paramsKey = params.keySet();
  61.                  for (String key : paramsKey) {
  62.                      call.addParameter(new QName(namespace, key), XMLType.XSD_STRING, ParameterMode.IN);
  63.                      String pValue = MapUtils.getString(params, key);
  64.                      header.addChildElement(key).setValue(pValue);
  65.                      parameterList.add(pValue);
  66.                  }
  67.              }
  68.              call.setUseSOAPAction(true);
  69.              call.setSOAPActionURI(soapActionURI);
  70.              call.addHeader(header);
  71.  
  72.              // 进行序列化 实体类也要序列化 implements Serializable
  73.              call.registerTypeMapping(clazz, new QName(namespace, soapActionURI),
  74.                      new BeanSerializerFactory(clazz, new QName(namespace, soapActionURI)),
  75.                      new BeanDeserializerFactory(clazz, new QName(namespace, soapActionURI)));
  76.              // 设置输出的类
  77.              call.setReturnClass(clazz);
  78.              // 接口返回结果
  79.              T result = (T) call.invoke(parameterList.toArray());
  80.              log.info(“调用 WebService 接口返回===>” + result);
  81.              return result;
  82.          } catch (Exception e) {
  83.              log.error(“调用 WebService 接口错误信息==>” + e.getMessage());
  84.          }
  85.          return null;
  86.      }
  87.  
  88.      /**
  89.          * WebService – 接口调用
  90.          *
  91.          * @param methodName 函数名
  92.          * @param params 参数
  93.          * @return 返回结果(String)
  94.          */
  95.      public static String call(String methodName, Map<String, String> params) {
  96.          // log.info(“调用 WebService 发送参数==>” + MapperUtils.mapToJson(params));
  97.          String soapActionURI = namespace + methodName;
  98.          try {
  99.              Service service = new Service();
  100.  
  101.              SOAPHeaderElement header = new SOAPHeaderElement(namespace, methodName);
  102.              header.setNamespaceURI(namespace);
  103.  
  104.              Call call = (Call) service.createCall();
  105.              call.setTargetEndpointAddress(url);
  106.  
  107.              call.setOperationName(new QName(namespace, methodName));
  108.  
  109.              // 添加参数
  110.              List<String> parameterList = Lists.newArrayList();
  111.              if (params != null) {
  112.                  Set<String> paramsKey = params.keySet();
  113.                  for (String key : paramsKey) {
  114.                      call.addParameter(new QName(namespace, key), XMLType.XSD_STRING, ParameterMode.IN);
  115.                      String pValue = MapUtils.getString(params, key);
  116.                      header.addChildElement(key).setValue(pValue);
  117.                      parameterList.add(pValue);
  118.                  }
  119.              }
  120.              call.setUseSOAPAction(true);
  121.              call.setSOAPActionURI(soapActionURI);
  122.              call.addHeader(header);
  123.              // 设置返回类型
  124.              call.setReturnType(new QName(namespace, methodName), String.class);
  125.              // 接口返回结果
  126.              String result = (String) call.invoke(parameterList.toArray());
  127.              log.info(“调用 WebService 接口返回===>” + result);
  128.              return result;
  129.          } catch (Exception e) {
  130.              log.error(“调用 WebService 接口错误信息==>” + e.getMessage());
  131.          }
  132.          return null;
  133.      }
  134.  
  135.      /**
  136.          * WebService – 调用接口
  137.          *
  138.          * @param methodName 函数名
  139.          * @param params 参数
  140.          * @return 返回结果(String)
  141.          */
  142.      public static String call2(String methodName, Map<String, String> params) {
  143.          // log.info(“调用 WebService 发送参数==>” + MapperUtils.mapToJson(params));
  144.          String soapActionURI = namespace + methodName;
  145.          try {
  146.              Service service = new Service();
  147.  
  148.              SOAPHeaderElement header = new SOAPHeaderElement(namespace, methodName);
  149.              header.setNamespaceURI(namespace);
  150.  
  151.              Call call = (Call) service.createCall();
  152.              call.setTargetEndpointAddress(url);
  153.  
  154.              call.setOperationName(new QName(namespace, methodName));
  155.  
  156.              // 添加参数
  157.              List<String> parameterList = Lists.newArrayList();
  158.              if (params != null) {
  159.                  Set<String> paramsKey = params.keySet();
  160.                  for (String key : paramsKey) {
  161.                      call.addParameter(new QName(namespace, key), XMLType.XSD_STRING, ParameterMode.IN);
  162.                      String pValue = MapUtils.getString(params, key);
  163.                      header.addChildElement(key).setValue(pValue);
  164.                      parameterList.add(pValue);
  165.                  }
  166.      }
  167.              call.setUseSOAPAction(true);
  168.              call.setSOAPActionURI(soapActionURI);
  169.              call.addHeader(header);
  170.              // 设置返回类型
  171.              call.setReturnType(XMLType.XSD_SCHEMA);
  172.              // 接口返回结果
  173.              Schema schemaResult = (Schema)call.invoke(parameterList.toArray());
  174.              String result = “”;
  175.              for(int i = 0; i<schemaResult.get_any().length; i++){
  176.                  result = result + schemaResult.get_any()[i];
  177.              }
  178.              log.error(“调用 WebService 接口返回===>” + result);
  179.              return result;
  180.          } catch (Exception e) {
  181.              log.error(“调用 WebService 接口错误信息==>” + e.getMessage());
  182.          }
  183.          return null;
  184.      }
  185. }
  • 第一个方法为返回对象的方式,区别在于需要定义返回对象,属性值需要跟 WebService 中的返回对象保持一致。
  • 第二个方法适用于调用 WebService后,返回的值为 String 类型。

参数详解:

  • methodName:函数名。需要调用的 WebService 的函数名称。
  • params:参数。调用 WebService 时需传入的参数。

总结

到此这篇关于如何使用axis调用WebService及Java WebService调用工具类的文章就介绍到这了,更多相关axis调用WebService内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

标签

发表评论