SpringBoot+Axis2搭建WebService服务端

article/2025/9/14 0:32:20

SpringBoot+Axis2搭建WebService服务端

之前用过Spring + Axis2搭建过WebService项目,网上也有很多资料教程,最近需要在一个SpringBoot项目中添加Axis2的服务端,在网上找了很久,没有找到相关教程,最终经过大神朋友的指点,终于添加成功了,在此记录一下,防止忘记。
参考资料:https://www.cnkirito.moe/servlet-explore/?utm_source=tuicool&utm_medium=referral

改变一:添加services.xml时

spring项目时,有WEB-INF目录,services.xml配置文件需要放在此目录下,但是springboot下没有了这个目录,需要在resources目录下新建WEB-INF目录,然后把services.xml的相关目录放到WEB-INF下:
在这里插入图片描述

改变二:添加servlet时

spring项目时,可以在web.xml中配置,但是springboot项目没有了这个文件,我们可以通过java代码来实现添加:

	@Beanpublic ServletRegistrationBean helloWorldServlet() {ServletRegistrationBean helloWorldServlet = new ServletRegistrationBean();helloWorldServlet.setServlet(new AxisServlet());//这里的AxisServlet就是web.xml中的org.apache.axis2.transport.http.AxisServlethelloWorldServlet.addUrlMappings("/services/*");//通过默认路径无法找到services.xml,这里需要指定一下路径,且必须是绝对路径helloWorldServlet.addInitParameter("axis2.repository.path", this.getClass().getResource("/WEB-INF").getPath().toString());helloWorldServlet.setLoadOnStartup(1);return helloWorldServlet;}

后续

在实际部署后发现获得的路径里带有“!”,
在这里插入图片描述
导致Axis2无法正常使用这个路径,经过各种查资料,最终没有找到比较好的解决办法,只能用最笨的办法拷贝到项目所在的目录下来用了,解决方案如下:

	@Beanpublic ServletRegistrationBean helloWorldServlet() {ServletRegistrationBean helloWorldServlet = new ServletRegistrationBean();helloWorldServlet.setServlet(new AxisServlet());//这里的AxisServlet就是web.xml中的org.apache.axis2.transport.http.AxisServlethelloWorldServlet.addUrlMappings("/services/*");//通过默认路径无法找到services.xml,这里需要指定一下路径,且必须是绝对路径String path = this.getClass().getResource("/WEB-INF").getPath().toString();LogUtil.info("The original path:" + path);if(path.toLowerCase().startsWith("file:")){LogUtil.info("去掉前面的“file:”!");path = path.substring(5);}if(path.indexOf("!") != -1){try {LogUtil.info("将WEB-INF/services/MyWebService/META-INF/services.xml文件拷贝到jar包同级目录下!");FileCopyUtils.copy("WEB-INF/services/MyWebService/META-INF/services.xml");} catch (IOException e) {LogUtil.error(e);}LogUtil.info("jar包运行!查找jar包同级目录下的“/WEB-INF”目录");path = path.substring(0, path.lastIndexOf("/", path.indexOf("!"))) + "/WEB-INF";}LogUtil.info("The final path:" + path);helloWorldServlet.addInitParameter("axis2.repository.path", path);helloWorldServlet.setLoadOnStartup(1);return helloWorldServlet;}

其中FileCopyUtils类是在网上找到的一个前辈写的:https://blog.csdn.net/sz85850597/article/details/81116755
另外发现“/WEB-INF”目录名是可以改的,不是非要叫这个名字。
技术有限,暂时无法完美解决,如有好的解决方案,请多指点。

附:源码 链接: https://pan.baidu.com/s/1zEo9pIQlkkLpeIBVzQ1yZw 提取码: kp9j

再后续

services.xml文件存放的目录问题,必须包含的目录结构:“axis2.repository.path”参数目录/services/自定义目录/META-INF/services.xml
其中services、META-INF、services.xml三个名字应该是不能修改,改了找不到服务了


http://chatgpt.dhexx.cn/article/NZu0rfU4.shtml

相关文章

AXI(2)完结

四、握手 4.1握手过程 所有的五个通道都是通过相同的VALID/READY握手处理来传输地址、数据和控制信息。 双向握手的机制意味着主机和从机之间传输数据时,都可以控制传输的速率,只有当VALID和READY同时为高电平时,传输才会发生。 发送方&a…

读Axis2用户帮助文档 (axis2中文文档)

作者:李红霞 时间:2006-10-19 声明:本文可以算作Axis2用户手册的翻译,但是翻译后的文本是经过作者理解写出来的,可能有些偏差,欢迎讨论。本文属作者原创,允许转载,但请注明出处。 英…

AXI 3.0 (1)

一、AXI简介 AMBA3.0中新增加了一种总线——AXI(Advanced eXtensible Interface,高级扩展接口)。 AMBA AXI 协议的目标是高性能、高频的系统设计,其包含了若干特性。 适合高带宽和低延迟的设计 提供高频操作,无需使…

Apache axis2 + Eclipse 开发 WebService

一、简介 Apache Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化…

Axis2与Web项目整合

一、说明: 上一篇介绍了通过使用Axis2来发布和调用WebService,但是是把WebService发布在Axis2提供的项目中,如果我们需要在自己的Web项目中来使用Axis2发布WebService该怎么做呢? 本篇即介绍在Web项目中使用Axis2来发布WebService. 二、具体…

Axis2中文手册

中文原文 http://tenn.javaeye.com/blog/100736 英文原文 http://ws.apache.org/axis2/1_0/userguide.html 概述 这个说明文档涉及以下内容:  如何使用 axis2 创建 web service 和客户端程序  如何定制一个模块 (Module) 并在 web service 中使用它  Sam…

axis2的使用(转载)

通过axis2发起WS请求时添加SOAP header 首先要获得一个ServiceClient对象,因为这个对象是org.apache.axis2.client.Stub里面定义的,所以你生成的stub里面应该直接就可以使用这个对象,或者调用stub的_getServiceClient()方法来获取这个对象。 …

SpringBoot2 整合 AXIS2 服务端和客户端

文章目录 一、AXIS2服务端1. 版本选型2.导入依赖3. services.xml4.Axis2配置类5.服务接口6.服务接口实现类7. FileCopyUtils工具类8. 测试验证 二、AXIS2服务端2.1. 客户端类2.2. 服务调用测试开源源码. 一、AXIS2服务端 1. 版本选型 阿健/框架版本spring-boot2.5.5axis21.7.…

WebService之Axis2系列教程(一)Axis2的下载、安装和使用

Axis2是目前比较流行的WebService引擎。WebService被应用在很多不同的场景。例如,可以使用WebService来发布服务端 Java类的方法,以便使用不同的客户端进行调用。这样可以有效地集成多种不同的技术来完成应用系统。WebService还经常被使用在SOA中&#x…

Axis2 webservice学习总结

一、学习课件目录: Axis2(WebService)培训资料1 - 百度文库 (baidu.com) WebService大讲堂之Axis2 - 百度文库 (baidu.com) 二、学习总结: Web Service是构建互联网分布式系统的基本部件,它是一个应用程序,它向外界暴露出一个…

小白轻松使用axis2构建webservice

引言: 使用axis2是来实现webservice接口是比较常见的,就我来说,如果要学一个首次接触东西,简单了解相关基础概念后,就希望自己能够简单快速的实现一个例子,在学习一门开发语言的时候,一个hello…

模板引擎 Velocity语法

Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用 由java代码定义的对象。作为一个比较完善的模板引擎,Velocity的功能是比较强大的&…

velocity 模板语法

velocity 模板语法 前言1. 访问1.1 变量1.2 属性1.3 方法 2. 指令2.1 #set 创建变量2.2 #if/#elseif/#else 分支控制2.3 #foreach 循环控制2.4 #include - 引入本地文件,文本展示2.5 #parse - 引入本地文件,velocity 解析后展示2.6 #stop - 停止模板解析…

finalize() 原理

finalize 方法的作用是: 如果对象在进行可达性分析后发现没有与 GC Roots 相连接的引用链,那他将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行 finalize 方法。 注意:当对象没有覆盖 finalize 方法&#xf…

finalize()

注:本文的目的并不是鼓励使用finalize方法,而是大致理清其作用、问题以及GC执行finalize的过程。 1. finalize的作用 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。fina…

java finalize方法详解

1. finalize的作用 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。finalize()与C中的析构函数不是对应的。C中的析构函数调用的时机是确定的(对象离开作用域或delete掉)&…

java中finalize()方法

finalize 垃圾回收机器(Garbage Collection),也叫GC,垃圾回收器主要有一下特点: 当对象不再被程序所使用的时候,垃圾回收器将会将其回收垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源&…

Finalize详解

finalize()方法详解,前言,finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。 finalize的作用: (1)finalize()与C中的析构函数不是对应的。C中的析构函数调用的时机是确定的…

finalize的理解

finalize的理解 一般的回答:它是Object中的一个方法,子类重写它,垃圾回收时候方法会被调用,可以再其中进行一些资源的解释和清理工作。 优秀的回答:将资源的释放和清理放在finalize方法中是非常不好的,影…

Java FX swt_DOC-13-08 JavaFX与SWT的协作性

DOC-13-08 JavaFX与SWT的协作性 本章展示了如何在SWT应用程序中加入一个JavaFX场景图,以及如何使SWT和JavaFX控件协作。 介绍 如果你开发SWT应用程序,你知道SWT使用本地操作系统的控件,而且并不能简单的配置来使用高级GUI特性,比如…