首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >使用axis调用WebService,Java WebService调用工具类

使用axis调用WebService,Java WebService调用工具类

作者头像
全栈程序员站长
发布于 2022-11-02 02:21:41
发布于 2022-11-02 02:21:41
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

文章目录

WebService 简介

概述

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

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

使用 axis 调用 WebService

引入依赖

pom.xml 依赖如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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 调用工具

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.micromaple.common.utils;
import com.google.common.collect.Lists;
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.encoding.ser.BeanDeserializerFactory;
import org.apache.axis.encoding.ser.BeanSerializerFactory;
import org.apache.axis.message.SOAPHeaderElement;
import org.apache.axis.types.Schema;
import org.apache.commons.collections.MapUtils;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import java.util.List;
import java.util.Map;
import java.util.Set;
/** * WebService - 工具类 * Title: WebServiceUtils * Description: * * @author Micromaple * @version 1.0.0 * @date 2022/7/1 12:14 */
@Slf4j
public class WebServiceUtils { 

// 接口调用地址
private static String url = "http://127.0.0.1:8080/webservice.asmx";
// 命名空间
private static String namespace = "http://tempuri.org/";
/** * WebService - 调用接口 * * @param methodName 函数名 * @param params 参数 * @param clazz 返回对象class * @return 返回结果(Object) */
public static <T> T call(String methodName, Map<String, String> params, Class<T> clazz) { 

// log.info("调用 WebService 发送参数==>" + MapperUtils.mapToJson(params));
String soapActionURI = namespace + methodName;
try { 

Service service = new Service();
SOAPHeaderElement header = new SOAPHeaderElement(namespace, methodName);
header.setNamespaceURI(namespace);
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName(namespace, methodName));
// 添加参数
List<String> parameterList = Lists.newArrayList();
if (params != null) { 

Set<String> paramsKey = params.keySet();
for (String key : paramsKey) { 

call.addParameter(new QName(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, new QName(namespace, soapActionURI),
new BeanSerializerFactory(clazz, new QName(namespace, soapActionURI)),
new BeanDeserializerFactory(clazz, new QName(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());
}
return null;
}
/** * WebService - 接口调用 * * @param methodName 函数名 * @param params 参数 * @return 返回结果(String) */
public static String call(String methodName, Map<String, String> params) { 

// log.info("调用 WebService 发送参数==>" + MapperUtils.mapToJson(params));
String soapActionURI = namespace + methodName;
try { 

Service service = new Service();
SOAPHeaderElement header = new SOAPHeaderElement(namespace, methodName);
header.setNamespaceURI(namespace);
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName(namespace, methodName));
// 添加参数
List<String> parameterList = Lists.newArrayList();
if (params != null) { 

Set<String> paramsKey = params.keySet();
for (String key : paramsKey) { 

call.addParameter(new QName(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(new QName(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());
}
return null;
}
/** * WebService - 调用接口 * * @param methodName 函数名 * @param params 参数 * @return 返回结果(String) */
public static String call2(String methodName, Map<String, String> params) { 

// log.info("调用 WebService 发送参数==>" + MapperUtils.mapToJson(params));
String soapActionURI = namespace + methodName;
try { 

Service service = new Service();
SOAPHeaderElement header = new SOAPHeaderElement(namespace, methodName);
header.setNamespaceURI(namespace);
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName(namespace, methodName));
// 添加参数
List<String> parameterList = Lists.newArrayList();
if (params != null) { 

Set<String> paramsKey = params.keySet();
for (String key : paramsKey) { 

call.addParameter(new QName(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());
}
return null;
}
}
  • 第一个方法为返回对象的方式,区别在于需要定义返回对象,属性值需要跟 WebService 中的返回对象保持一致。
  • 第二个方法适用于调用 WebService后,返回的值为 String 类型。

参数详解:

methodName:函数名。需要调用的 WebService 的函数名称。

params:参数。调用 WebService 时需传入的参数。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/181009.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年10月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
WebService系列之使用Axis获取天气预报数据
测试工具下载soapui测试 http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsdl pom配置: <properties> <
SmileNicky
2020/12/21
8100
WebService系列之使用Axis获取天气预报数据
SpringBoot调用.asmx后缀的webservice接口
最近在项目中,在与其他公司做对接中需要回调一个对方的接口,根据对方提供的接口地址,
全栈程序员站长
2022/09/08
2.8K0
SpringBoot调用.asmx后缀的webservice接口
WebService系列之使用Axis调用第三方wsdl接口
WebService系列之使用Axis调用第三方wsdl接口 测试工具下载soapui测试 http://ws.webxml.com.cn/WebServices/WeatherWS.asmx?wsd
SmileNicky
2020/12/21
1.6K0
WebService系列之使用Axis调用第三方wsdl接口
java调用.net asmx / wcf
一、先用asmx与wcf写二个.net web service: 1.1 asmx web服务:asmx-service.asmx.cs 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Services; 6 7 namespace WebServiceSample 8 { 9 /// <summary>
菩提树下的杨过
2018/01/19
1.6K0
java调用.net asmx / wcf
WebService客户端几种实现方式
大家好,又见面了,我是你们的朋友全栈君。 文章目录 一、发布一个webservice服务(jdk原生) 1.编写服务接口 2.服务实现类 3.发布服务 4.浏览器查看是否发布成功 二、几种客户端调用方式 1、jdk原生调用(需要获取服务接口文件) 2、用import命令生成客户端代码 3、cxf类库 两种调用方式。 4、axis调用方式 5、httpClient调用方式。 6、SoapUI 7、其他 一、发布一个webservice服务(jdk原生) 1.编写服务接口 import java
全栈程序员站长
2022/09/14
2.9K0
WebService客户端几种实现方式
java请求C# asmx接口[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/145055.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/26
9140
WebService: SpringBoot集成WebService实践二
该篇为上一篇的延伸,上一篇知识简单介绍了WebService 的使用,该篇会对代码中模块及功能进行详细介绍,以作对WebService 进一步的理解。
Freedom123
2024/03/29
7630
WebService: SpringBoot集成WebService实践二
java 调用webservice asmx「建议收藏」
用的jar包axis,可以在http://download.csdn.net/download/xiaoyong8823/4391971 这里下载
全栈程序员站长
2022/09/05
9830
解决 -- java 调用webservice 服务端收到参数为null
call.addParameter("arg0", XMLType.XSD_DATE,ParameterMode.IN); 这样是OK的,
微风-- 轻许--
2022/04/13
2.2K0
java 调用.asmx_Java调用asmx的一个例子
import org.apache.axis.client.Service; public class Test {
全栈程序员站长
2022/09/06
3920
java 调用webservice (asmx) 客户端开发示例
这是本人第一次写博客,其实就是自己做个笔记,写的很粗糙,也希望能给跟我遇到同样问题的你一点帮助。
全栈程序员站长
2022/09/02
1.4K0
java 调用asmx[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。package com.webservice.test;
全栈程序员站长
2022/06/27
2.1K0
java开发webservice接口_webservice接口的开发和调用
1、定义一个interface,使用@WebService注解标注接口,使用@WebMethod注解标注接口中定义的所有方法,如下所示:
全栈程序员站长
2022/09/13
3.5K0
java开发webservice接口_webservice接口的开发和调用
java调用webservice接口的几种方法
前几天看到群里有人问webservice,稍微总结一下! webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使用的接口。今天搜索到了非常好的 webservice provider列表 http://www.webservicex.net/WCF/default.aspx 这上面列出了70多个包括很多方面的free webservice provider,uti
三哥
2018/06/15
38.7K1
关于SOAP调用返回对象的写法 wsdl webservice
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/100560.html原文链接:
全栈程序员站长
2021/05/06
1.5K0
Springboot调用wsdl的webservice接口两种不常用方式
import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.en
JQ实验室
2022/02/10
1.6K0
我的第一次WebService接口开发
最近项目上需要对接WebService接口,之前从来没有用过,这次都遇见了。记录下基础的使用和我遇见的问题。 如果是报错找答案的,建议直接查看最后 “遇见的问题” 或搜索文章内容查看对应的问题。
全栈程序员站长
2022/07/01
1.7K0
我的第一次WebService接口开发
Java调用WebService之Axis实现
import org.apache.axis.client.Call; import org.apache.axis.client.Service; /** * @ClassName: TestAxis * @Description: TODO(描述这个类的作用) * @author huc * */ public class TestAxis { public static void main(String []args){ String inConditions
HUC思梦
2020/09/03
9900
java webservice asmx_WebService-asmx后缀接口调用[通俗易懂]
简述:.asmx是webservice服务程序的后缀名,ASP.NET 使用.asmx 文件来对Web Services的支持。.asmx 文件和.aspx文件一样都属于文本文件。它包含在.aspx文件之中,成为ASP.NET应用程序的一部分。
全栈程序员站长
2022/07/01
2.4K0
java怎么调用.asmx_Java调用Webservice(asmx)的例子
private String url=”http://www.webxml.com.cn/WebServices/WeatherWebService.asmx”;//提供接口的地址
全栈程序员站长
2022/08/31
1.3K0
推荐阅读
相关推荐
WebService系列之使用Axis获取天气预报数据
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档