SpringBoot2 整合 AXIS2 服务端和客户端

article/2025/9/14 2:22:54

在这里插入图片描述

文章目录

          • 一、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://chatgpt.dhexx.cn/article/X5DbhYkL.shtml

相关文章

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

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

Axis2 webservice学习总结

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

小白轻松使用axis2构建webservice

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

模板引擎 Velocity语法

Velocity是一个基于java的模板引擎&#xff08;template engine&#xff09;&#xff0c;它允许任何人仅仅简单的使用模板语言&#xff08;template language&#xff09;来引用 由java代码定义的对象。作为一个比较完善的模板引擎&#xff0c;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 - 引入本地文件&#xff0c;文本展示2.5 #parse - 引入本地文件&#xff0c;velocity 解析后展示2.6 #stop - 停止模板解析…

finalize() 原理

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

finalize()

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

java finalize方法详解

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

java中finalize()方法

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

Finalize详解

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

finalize的理解

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

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

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

Java SWT 表格Table如何动态显示信息

让Table显示信息用到的是TableItem类。创建一个TableItem类对象&#xff0c;通过调用该对象的setText( new String[ ] )方法可以显示一行数据&#xff0c;循环调用则可以显示多条不同的数据。 一、步骤: 1. 创建Table类 。最好将Table类设置为全局变量。并且设置该表格有多少列…

Java ——SWT利用DateTime获取日历控件

1、话不多说&#xff0c;先看效果图&#xff1a; 19是我选择的日期&#xff0c;其他功能就不一一介绍了&#xff0c;这个看你们自己。 2、Test01界面&#xff1a; Test01代码如下&#xff1a; package test; import org.eclipse.swt.widgets.Display; import org.eclipse.swt…

shell swt 样式_SWT之路:SWT图像显示

简明现代魔法 -> Java编程语言 -> SWT之路&#xff1a;SWT图像显示 SWT之路&#xff1a;SWT图像显示 2009-10-03 程序演示 还是先用SWT Desiner创建界面程序。然后创建一个Display对象和Image对象&#xff0c;和一个GC对象。类org.eclipse.swt.graphics.GC是一个封装了所…

eclipse java swt_Eclipse下搭建SWT开发环境

0.序言 还是老风格&#xff0c;从头写些基本的东西&#xff0c;帮助自己&#xff0c;也帮助正处于困惑中的别人。今天介绍的是Eclipse下的SWT的配置过程。自己前两天要做个项目&#xff0c;配置了半天都不正确&#xff0c;后来慢慢总结了一下&#xff0c;不同环境配置的方法可能…

java swt button_JAVA.SWT/JFace: SWT基本组件之按钮(Button)

《Eclipse SWT/JFACE 核心应用》 清华大学出版社 5.2 按钮(Button) 按钮有普通按钮(SWT.PUSH)、单选按钮(SWT.RADIO)、多选按钮(SWT.CHECK)、箭头按钮(SWT.ARROW)和切换按钮(SWT.TOGGLE)几种类型。 同时&#xff0c;也可以设置按钮的样式。设置按钮文字对齐的样式有SWT.LEFT、S…

Java SWT 表格Table实时刷新数据

一、动态展示数据 当对表格展示的数据进行删除和增加的时候&#xff0c;想实时进行表格数据更新显示。用到的方法是&#xff0c;首先将表格数据全部删掉&#xff0c;然后在读取数据库最新的数据显示到表格中。  可以将显示表格信息的代码封装成一个方法&#xff0c;当对当前表…

Java SWT封装Table显示数据

一个表格就类似于一张二维表。第一行为关系模型&#xff0c;就是每一列的列名。从第二行开始就是表的数据&#xff0c;简称元组。下面实现对其Table的封装。 首先显示一个窗口。创建一个Table。将在showTableInfos()方法对Table表格进行封装。 import org.eclipse.swt.widgets.…

SWT控件总结

控件palette 1.System Choose component 选择组件&#xff1a;允许选择组件类型并将其拖放到设计画布上 Tab Order标签的顺序&#xff1a;设置所选选项卡顺序 2.Composites Composite 复合&#xff1a;能够包含其他控件的控件 Group 集团&#xff1a;提供带有可选标题的蚀…