webService 调用服务端

1、Axis方式

package com.dyaqi.test;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import java.net.URL;

/**
 * @author: dyaqi
 * @date: 2024/7/24 17:31
 * @since: 1.0.0
 * @功能描述: 可直接执行,webService调用服务端:http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx?wsdl
 */
public class WebServerTest {

    public static void main(String[] args) {
        try {
            // 需要引入 axis.jar 包
            Service service = new Service();
            // 创建一个call对象
            Call call = (Call) service.createCall();
            // 设置目标地址
            call.setTargetEndpointAddress(new URL("http://www.webxml.com.cn/webservices/qqOnlineWebService.asmx"));
            // 设置是否使用SoapAction
            call.setUseSOAPAction(true);
            // 设置SoapAction路径(targetNamespace + method)
            call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline");
            // 设置远程调用类中的方法(targetNamespace, method)
            call.setOperationName(new QName("http://WebXml.com.cn/", "qqCheckOnline"));
            // 设置请求参数(根据服务端需要的参数设置例如需要一个参数名为Name的String类型)IN为输入 OUT为输出 INOUT为输入输出
            call.addParameter(new QName("http://WebXml.com.cn/", "qqCode"), XMLType.XSD_STRING, ParameterMode.IN);
            // 设置返回数据类型(SOAP_VECTOR为数组具体类型自行百度)
            call.setReturnType(XMLType.XSD_STRING);
            // 调用webService获得返回的数据 转入一个Object[]数组,数组的元素就是转入参数的值
            Object invoke = call.invoke(new Object[]{"QQ号"});
            System.out.println(invoke);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

2、CXF方式

依赖

<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-spring-boot-starter-jaxws</artifactId>
    <version>3.6.4</version>
</dependency>

代码

package com.dyaqi.webservice;

import org.apache.cxf.endpoint.Client;
import org.apache.cxf.jaxws.endpoint.dynamic.JaxWsDynamicClientFactory;

/**
 * @author: dongyq
 * @date: 2024/10/8 16:10
 * @since: 1.0.0
 * @功能描述: 3.6.4开始支持jdk11
 */
public class WebServerTest {
    public static void main(String[] args) {
        //创建JaxWsDynamicClientFactory作为调用客户端
        JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
        //接口wsdl的地址
        String wsUrl = "http://localhost:8080/services?wsdl";
        //需要调用的方法名称
        String method = "A_StateInf";
        try {
            //创建客户端
            Client client = dcf.createClient(wsUrl);
            //请求的方法名 以及 请求参数
            Object[] objects = client.invoke(method, "");
            System.out.println(objects[0].toString());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

https://zhuanlan.zhihu.com/p/708985359

posted @ 2024-07-25 17:20  Dyaqi  阅读(8)  评论(0编辑  收藏  举报