SpringBoot2 整合 AXIS2 服务端和客户端

在这里插入图片描述

文章目录

          • 一、AXIS2服务端
            • 1. 版本选型
            • 2.导入依赖
            • 3. services.xml
            • 4.Axis2配置类
            • 5.服务接口
            • 6.服务接口实现类
            • 7. FileCopyUtils工具类
            • 8. 测试验证
          • 二、AXIS2服务端
            • 2.1. 客户端类
            • 2.2. 服务调用测试
            • 开源源码.

一、AXIS2服务端
1. 版本选型
阿健/框架版本
spring-boot2.5.5
axis21.7.9
2.导入依赖
		  <properties><axis2.version>1.7.9</axis2.version></properties><!--axis2 begin --><dependency><groupId>org.apache.axis2</groupId><artifactId>axis2-adb</artifactId><version>${axis2.version}</version></dependency><dependency><groupId>org.apache.axis2</groupId><artifactId>axis2-kernel</artifactId><version>${axis2.version}</version></dependency><dependency><groupId>org.apache.axis2</groupId><artifactId>axis2-transport-http</artifactId><version>${axis2.version}</version><exclusions><exclusion><groupId>javax-servlet</groupId><artifactId>servlet-api</artifactId></exclusion></exclusions></dependency><dependency><groupId>org.apache.axis2</groupId><artifactId>axis2-transport-local</artifactId><version>${axis2.version}</version></dependency><dependency><groupId>org.apache.axis2</groupId><artifactId>axis2-jaxws</artifactId><version>${axis2.version}</version></dependency><!--axis2 end -->
3. services.xml

首先创建基本路径:WEB-INF/services/axis2/META-INF/services.xml
注:路径名必须和上面一致
在这里插入图片描述
services.xml内容

<?xml version="1.0" encoding="UTF-8" ?>
<serviceGroup><!--name:暴露的服务名 根据需求配置或者自定义scope:默认即可targetNamespace:命名空间 根据需求配置或者自定义--><service name="axis2Service" scope="application" targetNamespace="http://service.axis2.gblfy.com"><description>simple axis2 webservice example</description><!--命名空间 根据需求配置或者自定义--><schema schemaNamespace="http://service.axis2.gblfy.com"/><!--实现类全路径--><parameter name="ServiceClass">com.gblfy.axis2.service.impl.Axis2ServiceImpl</parameter><operation name="sayHello"><messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/></operation></service>
</serviceGroup>
4.Axis2配置类

Axis2WebServiceConfiguration是webservice最主要的配置类,主要作用为读取services.xml配置文件,内容如下:

package com.gblfy.axis2.config;import com.gblfy.axis2.utils.FileCopyUtils;
import org.apache.axis2.transport.http.AxisServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.io.IOException;/*** axis2配置类,用于设置AxisServlet和访问读取services.xml文件** @author gblfy* @date 2021-09-25*/
@Configuration
public class Axis2WebServiceConfiguration {//服务访问前缀public static final String URL_PATH = "/services/*";//services.xml文件的位置public static final String SERVICES_FILE_PATH = "WEB-INF/services/axis2/META-INF/services.xml";//AXIS2参数keypublic static final String AXIS2_REP_PATH = "axis2.repository.path";@Beanpublic ServletRegistrationBean axis2Servlet() {ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();servletRegistrationBean.setServlet(new AxisServlet());servletRegistrationBean.addUrlMappings(URL_PATH);// 通过默认路径无法找到services.xml,这里需要指定一下路径,且必须是绝对路径String path = this.getClass().getResource("/WEB-INF").getPath().toString();if (path.toLowerCase().startsWith("file:")) {path = path.substring(5);}if (path.indexOf("!") != -1) {try {FileCopyUtils.copy(SERVICES_FILE_PATH);} catch (IOException e) {e.printStackTrace();}path = path.substring(0, path.lastIndexOf("/", path.indexOf("!"))) + "/WEB-INF";}//System.out.println("xml配置文件,path={ "+path+" }");servletRegistrationBean.addInitParameter(AXIS2_REP_PATH, path);servletRegistrationBean.setLoadOnStartup(1);return servletRegistrationBean;}}
5.服务接口
package com.gblfy.axis2.service;/*** axis2接口类** @author gblfy* @date 2021-09-25*/
public interface Axis2Service {public String sayHello(String name);
}
6.服务接口实现类
package com.gblfy.axis2.service.impl;import com.gblfy.axis2.service.Axis2Service;
import org.springframework.stereotype.Service;/*** axis2接口实现类** @author gblfy* @date 2021-09-25*/
@Service
public class Axis2ServiceImpl implements Axis2Service {@Overridepublic String sayHello(String name) {return "hello, " + name;}
}
7. FileCopyUtils工具类

FileCopyUtils上面Axis2WebServiceConfiguration配置类有用到,主要作用确保service.xml的调用,代码如下:

package com.gblfy.axis2.utils;import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;/*** 将jar内的文件复制到jar包外的同级目录下** @author gblfy* @date 2021-09-25*/
public class FileCopyUtils {private static final Logger log = LoggerFactory.getLogger(FileCopyUtils.class);private static InputStream getResource(String location) throws IOException {InputStream in = null;try {PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();in = resolver.getResource(location).getInputStream();byte[] byteArray = IOUtils.toByteArray(in);return new ByteArrayInputStream(byteArray);} catch (Exception e) {e.printStackTrace();log.error("getResource is error: {}", e);return null;} finally {if (in != null) {in.close();}}}/*** 获取项目所在文件夹的绝对路径** @return*/private static String getCurrentDirPath() {URL url = FileCopyUtils.class.getProtectionDomain().getCodeSource().getLocation();String path = url.getPath();if (path.startsWith("file:")) {path = path.replace("file:", "");}if (path.contains(".jar!/")) {path = path.substring(0, path.indexOf(".jar!/") + 4);}File file = new File(path);path = file.getParentFile().getAbsolutePath();return path;}private static Path getDistFile(String path) throws IOException {String currentRealPath = getCurrentDirPath();Path dist = Paths.get(currentRealPath + File.separator + path);Path parent = dist.getParent();if (parent != null) {Files.createDirectories(parent);}Files.deleteIfExists(dist);return dist;}/*** 复制classpath下的文件到jar包的同级目录下** @param location 相对路径文件,例如kafka/kafka_client_jaas.conf* @return* @throws IOException*/public static String copy(String location) throws IOException {InputStream in = getResource("classpath:" + location);Path dist = getDistFile(location);Files.copy(in, dist);in.close();return dist.toAbsolutePath().toString();}}
8. 测试验证

启动项目
http://localhost:8080/services/axis2Service?wsdl
在这里插入图片描述

二、AXIS2服务端
2.1. 客户端类
package com.gblfy.axis2.client;import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
import org.springframework.stereotype.Component;import javax.xml.namespace.QName;/*** axis2调用客户端** @author gblfy* @date 2021-09-25*/
@Component
public class Axis2WsClient {//默认超时时间20spublic static final Long timeOutInMilliSeconds = 2 * 20000L;/*** axis2调用客户端** @param url                   请求服务地址* @param nameSpace             命名空间* @param method                方法名* @param reqXml                请求报文* @param timeOutInMilliSeconds 超时时间* @return String 类型的响应报恩* @throws AxisFault 遇到异常则抛出不处理*/public static String sendWsMessage(String url, String nameSpace, String method, String reqXml, long timeOutInMilliSeconds) throws AxisFault {String resXml = null;try {EndpointReference targetEPR = new EndpointReference(url);RPCServiceClient sender = new RPCServiceClient();Options options = sender.getOptions();options.setTimeOutInMilliSeconds(timeOutInMilliSeconds); //超时时间20soptions.setTo(targetEPR);QName qName = new QName(nameSpace, method);Object[] param = new Object[]{reqXml};//这是针对返值类型的Class<?>[] types = new Class[]{String.class};Object[] response = sender.invokeBlocking(qName, param, types);resXml = response[0].toString();// System.out.println("响应报文:" + resXml);} catch (AxisFault e) {e.printStackTrace();throw e;}return resXml;}public static void main(String[] args) {try {String url = "http://localhost:8080/services/axis2Service?wsdl";String nameSpace = "http://service.axis2.gblfy.com";String method = "sayHello";String reqXml = "请求报文";String resXml = sendWsMessage(url, nameSpace, method, reqXml, timeOutInMilliSeconds);System.out.println("响应报文:" + resXml);} catch (AxisFault axisFault) {axisFault.printStackTrace();}}
}
2.2. 服务调用测试

在这里插入图片描述

开源源码.

https://gitee.com/gb_90/unified-access-center

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517161.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里风控大脑关于大数据应用的探索与实践

以下内容根据演讲视频以及PPT整理而成。本次分享主要围绕以下三个方面&#xff1a; 一、阿里风控大脑整体介绍二、近线引擎三、离线引擎一、阿里风控大脑整体介绍1. 阿里风控大脑是什么? 阿里的风控主要分为两大块。一块是金融领域&#xff0c;主要业务是支付宝&#xff0c;另…

我和美国 AI 博士聊了聊:2020 年,这件事比存钱更重要!

今年还有什么比股市更赚钱的技能&#xff1f;那就是正处于 IT 风口的人工智能所需的 Python 。我见过市面上很多的 Python 讲解教程和书籍&#xff0c;他们大都这样讲 Python 的&#xff1a;先从 Python 的发展历史开始&#xff0c;介绍 Python 的基本语法规则&#xff0c;Pyth…

idea创建springmvc项目

文章目录1. 创建项目2.配置3. 加载tomcat4. 完成5. 启动项目6. 效果图7. 修改访问路径1. 创建项目 2.配置 3. 加载tomcat 4. 完成 5. 启动项目 6. 效果图 7. 修改访问路径

Java工程师该如何编写高效代码?

阿里妹导读&#xff1a;世界上只有两种物质&#xff1a;高效率和低效率&#xff1b;世界上只有两种人&#xff1a;高效率的人和低效率的人。——萧伯纳 同理&#xff0c;世界上只有两种代码&#xff1a;高效代码和低效代码&#xff1b;世界上只有两种人&#xff1a;编写高效代码…

Terraform Module 可视化正式发布

可视化操作界面 12月12日&#xff0c;阿里云开放平台正式对外推出 Terraform Module 的可视化操作界面&#xff1a;https://api.aliyun.com/#/cli?toolTerraform&#xff0c;集合所有在 Terraform Registry 上注册过的 Module&#xff0c;对外提供在线运行 Terraform Module …

“编程能力差的程序员,90%输在这事上!”谷歌AI专家:都是瞎努力!

Google 人工智能开发者专家彭靖田老师说——超90%的程序员在初学Python 人工智能时&#xff0c;都会遇到下面3个问题&#xff1a;1.想学人工智能&#xff0c;但不知从何学起&#xff0c;也不知道该选择什么方向...2.Python语法、机器学习/深度学习框架、算法都能看懂&#xff0…

小程序开发(6)-之自定义导航栏

#如图一所示&#xff0c;我们在导航栏中加了个文案和搜索框第一步我们需要在app.json->window设置&#xff0c;还可配置更多的选项 &#xff1a; {"navigationStyle": "custom","backgroundTextStyle": "light","navigationB…

ClickHouse深度揭秘

引言 ClickHouse是近年来备受关注的开源列式数据库&#xff0c;主要用于数据分析&#xff08;OLAP&#xff09;领域。目前国内社区火热&#xff0c;各个大厂纷纷跟进大规模使用&#xff1a; 今日头条 内部用ClickHouse来做用户行为分析&#xff0c;内部一共几千个ClickHouse节…

国货在崛起,八成都做对了这件事

来了&#xff01;阿里巴巴年度最大的商业大会&#xff0c;第二届ONE商业大会。 此次ONE大会上&#xff0c;国货品牌的崛起成为所有人瞩目的焦点&#xff1a;8成知名服饰企业已同阿里云手拉手&#xff0c;收入平均增速24%&#xff01; 阿里云智能总裁张建锋&#xff08;中&…

nacos 集成 zipkin sleuth实现链路追踪(入门篇)

声明&#xff1a;链路追踪属于微服务的一部分&#xff0c;微服务系列博文陆续会出&#xff0c;可以帮助小伙伴们学习微服务一站式从入门到精通。 文章目录一、zipkin 服务端1. 下载2. 前台运行3. 服务端访问二、网关服务2.1. 父项目依赖2.2. gateway依赖2.3. gateway配置三、订…

开源巨头 SUSE 收购 Rancher Labs,云原生时代来临

作者 | 马超责编 | 伍杏玲封图 | rancher.com官网出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;近日&#xff0c;全球最大的独立开源公司SUSE宣布收购云原生初始公司Rancher Labs。针对此交易&#xff0c;SUSE首席执行官Melissa Di Donato表示&#xff1a;“我们…

小程序开发(8)-之跳转第三方小程序设计

嗯嗯&#xff0c;这个其实没什么好说&#xff0c;但还是说说我们项目的做法&#xff0c;因为我们这里需要跳转的小程序挺多的&#xff0c;所以我们采用了在后台配置的&#xff0c;像图一一样&#xff0c;配置名称、appid、跳转的页面地址等 wx.navigateToMiniProgram({appId: …

使用函数计算三步实现深度学习 AI 推理在线服务

目前深度学习应用广发&#xff0c; 其中 AI 推理的在线服务是其中一个重要的可落地的应用场景。本文将为大家介绍使用函数计算部署深度学习 AI 推理的最佳实践, 其中包括使用 FUN 工具一键部署安装第三方依赖、一键部署、本地调试以及压测评估&#xff0c; 全方位展现函数计算…

仅用 2 年过渡到自研 ARM 芯片,苹果的底气从何而来?

作者 | Steven Sinofsky译者 | 弯月&#xff0c;责编 | 屠敏头图 | CSDN 下载自东方 IC出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;今年 WWDC 2020 上&#xff0c;苹果宣布自研 ARM 芯片——Apple Silicon&#xff0c;对于苹果而言&#xff0c;Apple Silicon很…

Flink SQL 如何实现数据流的 Join?

无论在 OLAP 还是 OLTP 领域&#xff0c;Join 都是业务常会涉及到且优化规则比较复杂的 SQL 语句。对于离线计算而言&#xff0c;经过数据库领域多年的积累&#xff0c;Join 语义以及实现已经十分成熟&#xff0c;然而对于近年来刚兴起的 Streaming SQL 来说 Join 却处于刚起步…

小程序开发(9)-之地图组件map、导航

map用起来真的一言难尽呀&#xff0c;按照官方文档说是可以支持传入一个setting&#xff0c;来配置所以的属性的。。&#xff0c;但是我试了没效果&#xff0c;经纬度更新了&#xff0c;调试代码看到的wxml经纬度也变化了&#xff0c;但是map上的经纬度却没变化&#xff0c;后来…

惊魂48小时,阿里工程师如何紧急定位线上内存泄露?

阿里妹导读&#xff1a;云计算场景下的大规模分布式系统中&#xff0c;网络异常、磁盘IO异常、时钟跳变、操作系统异常乃至软件本身可能存在bugs等&#xff0c;均给分布式系统正确运行带来了挑战。持续的监控报警完善是打造稳定高可用分布式系统过程中非常重要的工作&#xff0…

我的程序跑了 60 多小时,就是为了让你看一眼 JDK 的 BUG 导致的内存泄漏

来源 | why技术荒腔走板大家好&#xff0c;我是 why&#xff0c;老规矩&#xff0c;先来一个简短的荒腔走板&#xff0c;给冰冷的技术文注入一丝色彩。上面图片中这个正在奔跑的少年&#xff0c;是正在参加校运会的我&#xff0c;那一年我 18 岁&#xff0c;高三。参加的项目是…

Flutter+Serverless端到端研发架构实践

Serverless&#xff08;无服务架构&#xff09;被誉为下一代云计算&#xff0c;自概念推出以来&#xff0c;因为能带来研发交付速度提升与成本的降低在业内异常火爆。闲鱼客户端基于Flutter进行架构演进与创新&#xff0c;通过Flutter统一Android和iOS双端提升研发效能之后&…

Go 开发关键技术指南 | 为什么你要选择 GO?(内含超全知识大图)

导读&#xff1a;从问题本身出发&#xff0c;不局限于 Go 语言&#xff0c;探讨服务器中常常遇到的问题&#xff0c;最后回到 Go 如何解决这些问题&#xff0c;为大家提供 Go 开发的关键技术指南。我们将以系列文章的形式推出《Go 开发的关键技术指南》&#xff0c;共有 4 篇文…