0


使用axis调用WebService,Java 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 调用工具类

packagecom.micromaple.common.utils;importcom.google.common.collect.Lists;importlombok.extern.slf4j.Slf4j;importorg.apache.axis.client.Call;importorg.apache.axis.client.Service;importorg.apache.axis.encoding.XMLType;importorg.apache.axis.encoding.ser.BeanDeserializerFactory;importorg.apache.axis.encoding.ser.BeanSerializerFactory;importorg.apache.axis.message.SOAPHeaderElement;importorg.apache.axis.types.Schema;importorg.apache.commons.collections.MapUtils;importjavax.xml.namespace.QName;importjavax.xml.rpc.ParameterMode;importjava.util.List;importjava.util.Map;importjava.util.Set;/**
 * WebService - 工具类
 * Title: WebServiceUtils
 * Description:
 *
 * @author Micromaple
 * @version 1.0.0
 * @date 2022/7/1 12:14
 */@Slf4jpublicclassWebServiceUtils{/**
     * WebService - 调用接口
     *
     * @param methodName 函数名
     * @param params     参数
     * @param clazz      返回对象class
     * @return 返回结果(Object)
     */publicstatic<T>Tcall(String methodName,Map<String,String> params,Class<T> clazz){// log.info("调用 WebService 发送参数==>" + MapperUtils.mapToJson(params));String url ="http://127.0.0.1:8080/webservice.asmx";String namespace ="http://tempuri.org/";String soapActionURI = namespace + methodName;try{Service service =newService();SOAPHeaderElement header =newSOAPHeaderElement(namespace, methodName);
            header.setNamespaceURI(namespace);Call call =(Call) service.createCall();
            call.setTargetEndpointAddress(url);

            call.setOperationName(newQName(namespace, methodName));// 添加参数List<String> parameterList =Lists.newArrayList();if(params !=null){Set<String> paramsKey = params.keySet();for(String key : paramsKey){
                    call.addParameter(newQName(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,newQName(namespace, soapActionURI),newBeanSerializerFactory(clazz,newQName(namespace, soapActionURI)),newBeanDeserializerFactory(clazz,newQName(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());}returnnull;}/**
     * WebService - 接口调用
     *
     * @param methodName 函数名
     * @param params     参数
     * @return 返回结果(String)
     */publicstaticStringcall(String methodName,Map<String,String> params){// log.info("调用 WebService 发送参数==>" + MapperUtils.mapToJson(params));String url ="http://127.0.0.1:8080/webservice.asmx";String namespace ="http://tempuri.org/";String soapActionURI = namespace + methodName;try{Service service =newService();SOAPHeaderElement header =newSOAPHeaderElement(namespace, methodName);
            header.setNamespaceURI(namespace);Call call =(Call) service.createCall();
            call.setTargetEndpointAddress(url);

            call.setOperationName(newQName(namespace, methodName));// 添加参数List<String> parameterList =Lists.newArrayList();if(params !=null){Set<String> paramsKey = params.keySet();for(String key : paramsKey){
                    call.addParameter(newQName(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(newQName(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());}returnnull;}/**
     * WebService - 调用接口
     *
     * @param methodName 函数名
     * @param params     参数
     * @return 返回结果(String)
     */publicstaticStringcall2(String methodName,Map<String,String> params){// log.info("调用 WebService 发送参数==>" + MapperUtils.mapToJson(params));String url ="http://127.0.0.1:8080/webservice.asmx";String namespace ="http://tempuri.org/";String soapActionURI = namespace + methodName;try{Service service =newService();SOAPHeaderElement header =newSOAPHeaderElement(namespace, methodName);
            header.setNamespaceURI(namespace);Call call =(Call) service.createCall();
            call.setTargetEndpointAddress(url);

            call.setOperationName(newQName(namespace, methodName));// 添加参数List<String> parameterList =Lists.newArrayList();if(params !=null){Set<String> paramsKey = params.keySet();for(String key : paramsKey){
                    call.addParameter(newQName(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());}returnnull;}}
  • 第一个方法为返回对象的方式,区别在于需要定义返回对象,属性值需要跟 WebService 中的返回对象保持一致。
  • 第二个方法适用于调用 WebService后,返回的值为 String 类型。

参数详解:

methodName

:函数名。需要调用的

WebService

的函数名称。

params

:参数。调用

WebService

时需传入的参数。

标签: java web

本文转载自: https://blog.csdn.net/qq_41779565/article/details/125564485
版权归原作者 micromaple 所有, 如有侵权,请联系我们删除。

“使用axis调用WebService,Java WebService调用工具类”的评论:

还没有评论