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();
}
}
}