SpringBoot使用 axis 实现webservice客户端(亲测可行)

Posted 小志的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot使用 axis 实现webservice客户端(亲测可行)相关的知识,希望对你有一定的参考价值。

目录

一、webservice在线验证服务端接口地址

二、使用 axis 实现webservice客户端代码示例

2.1、服务端地址使用qq在线接口验证接口

  • 访问qq 在线验证接口,然后找到下图中定义的内容:

2.2、webservice客户端示例代码

  • pom文件引入依赖

    <!-- webservice start  -->
    <dependency>
        <groupId>org.apache.axis</groupId>
        <artifactId>axis</artifactId>
        <version>1.4</version>
    </dependency>
    <!-- 解决cell转换问题-->
    <dependency>
        <groupId>javax.xml.rpc</groupId>
        <artifactId>javax.xml.rpc-api</artifactId>
        <version>1.1.1</version>
    </dependency>
    <!--解析调用结果以及数据转换包-->
    <dependency>
        <groupId>commons-discovery</groupId>
        <artifactId>commons-discovery</artifactId>
        <version>0.2</version>
    </dependency>
    <dependency>
        <groupId>javax.xml.soap</groupId>
        <artifactId>javax.xml.soap-api</artifactId>
        <version>1.4.0</version>
    </dependency>
    <dependency>
        <groupId>wsdl4j</groupId>
        <artifactId>wsdl4j</artifactId>
        <version>1.6.3</version>
    </dependency>
    <!-- webservice end-->
    
  • 示例代码

    package com.xz.jdk11.webservice;
    
    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.handlers.soap.SOAPService;
    import javax.xml.namespace.QName;
    import javax.xml.rpc.ParameterMode;
    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * @description:
     * @author: xz
     */
    @Slf4j
    public class webServiceClient 
        /**
         * @param url WSDL的地址
         * @param targetNamespace  命名空间,这个地址在你的wsdl打开后可以看到的,
         *                         上面有写着targetNamespace="http://xxx",这个就是你的命名空间值了;
         * @param method  具体方法的调用URI
         * */
        public static String invokeRemote(String url, String targetNamespace,String serviceName, String method, Map<String, String> param)
            String qqCode=param.get("qqCode");
            log.info("webservice客户端调用[WSDL的地址]url==,[命名空间]targetNamespace==,[方法]method====,[参数]param====",url,targetNamespace,method,param.toString());
            String result="";
            try 
                //创建服务调用对象
                Service service = new Service();
                //通过service创建call对象
                Call call = (Call) service.createCall();
                //设置响应超时
                call.setTimeout(3000);
                call.setTargetEndpointAddress(new java.net.URL(url));
                //设置调用方法
                call.setOperationName(new QName(targetNamespace,method));
    
                // 设置参数名 :参数名 ,参数类型:String, 参数模式:\\'IN\\' or \\'OUT\\'
                call.addParameter(new QName(targetNamespace, "qqCode"), XMLType.XSD_STRING, ParameterMode.IN);
                //设置传入服务端的字符集格式如utf-8等
                call.setEncodingStyle("UTF-8");
                // 设置返回类型
                call.setReturnType(XMLType.XSD_STRING);
                //启用soap
                call.setUseSOAPAction(true);
                //设置soapAction
                String soapAction=targetNamespace+method;
                call.setSOAPActionURI(soapAction);
                //设置服务名
                SOAPService soapService = new SOAPService();
                soapService.setName(serviceName);
    
                call.setSOAPService(soapService);
    
                Object obj=null;
                try 
                    // 远程调用
                    obj=call.invoke(new Object[]qqCode);
                 catch (Exception e) 
                    e.printStackTrace();
                
                result =obj.toString();
                log.info("soap请求报文===",call.getMessageContext().getRequestMessage().getSOAPPartAsString());
                log.info("soap响应报文===",call.getResponseMessage().getSOAPPartAsString());
                log.info("result====",result);
             catch (Exception e) 
                e.printStackTrace();
            
            return result;
        
    
        public static void main(String[] args) 
            String url="http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx";
            String targetNamespace="http://WebXml.com.cn/";
            String serviceName="qqOnlineWebService";
            String method="qqCheckOnline";
            Map<String, String> param=new HashMap<>();
            param.put("qqCode","1325169021");
            invokeRemote(url,targetNamespace,serviceName,method,param);
        
    
    
  • 运行查看输出结果

以上是关于SpringBoot使用 axis 实现webservice客户端(亲测可行)的主要内容,如果未能解决你的问题,请参考以下文章

springboot集成axis1.4

WebService学习之旅使用Apache Axis2实现WebService客户端调用

AXIS2+Myeclipse实现WebService数据库存储简单实例

Axis2生成wsdl客户端代码并实现webservice调用

axis2开发webservice之编写Axis2模块(Module)

axis2的wsdl无法使用eclipse axis1插件来生成client--解决方法