SpringBoot集成axis发布WebService服务

news2024/11/16 17:28:24

文章目录

    • 1、使用maven-web项目生成server-config.wsdd文件
      • 1.1、新建maven-web项目
        • 1.1.1、新建项目
        • 1.1.2、添加依赖
      • 1.2、编写服务接口和实现类
        • 1.2.1、OrderService接口
        • 1.2.2、OrderServiceImpl实现类
      • 1.3、配置deploy.wsdd文件
        • deploy.wsdd文件
      • 1.4、配置tomcat
        • 1.4.1、配置tomcat-server
        • 1.4.2、配置web.xml 文件
      • 1.5、生成server-config.wsdd文件
        • 1.5.1、验证服务是否发布
        • 1.5.2、生成server-config.wsdd文件
        • 1.5.3、验证server-config.wsdd文件
    • 2、将axis集成到SpringBoot应用中去
      • 2.1、新建springboot应用
      • 2.2、配置应用
        • 2.2.1、复制server-config.wsdd文件
        • 2.2.2、新建AxisServiceConfig配置类
        • 2.2.3、新建EngineConfigurationFactoryServlet类
      • 2.3、启动并访问
    • 3、验证服务
      • 3.1、获取wsdl文件
      • 3.2、使用soapUI验证

本文档详细说明了使用SpringBoot集成axis发布WebService服务的步骤,供大家在开发的过程中参考

1、使用maven-web项目生成server-config.wsdd文件

1.1、新建maven-web项目

1.1.1、新建项目

新建maven-web项目,archetype这里选择maven-archetype-webapp

在这里插入图片描述

1.1.2、添加依赖

pom.xml的依赖添加如下:

        
<!-- 引入axis的依赖 BEGIN -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
</dependency>
<dependency>
    <groupId>axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>axis</groupId>
    <artifactId>axis-wsdl4j</artifactId>
    <version>1.5.1</version>
</dependency>
<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>
<!-- 引入axis的依赖 END -->

1.2、编写服务接口和实现类

1.2.1、OrderService接口

新建一个OrderService接口,如下:

package com.iambest.study.axis.service;

public interface OrderService {

    /**
     * 下单接口
     * @param userId 用户ID
     * @param token 令牌
     * @param orderInfo 订单信息-JSON格式
     * @return
     */
    String createOrder(String userId, String token, String orderInfo);

    /**
     * 支付接口
     * @param userId 用户ID
     * @param token 令牌
     * @param paymentInfo 支付信息-JSON格式
     * @return
     */
    String payment(String userId, String token, String paymentInfo);

}

1.2.2、OrderServiceImpl实现类

新建接口实现类,这里演示需要,仅对方法做简单实现,如下:

package com.iambest.study.axis.service.impl;

import com.iambest.study.axis.service.OrderService;

public class OrderServiceImpl implements OrderService {
    @Override
    public String createOrder(String userId, String token, String orderInfo) {
        return "SUCCESS";
    }

    @Override
    public String payment(String userId, String token, String paymentInfo) {
        return "SUCCESS";
    }
}

1.3、配置deploy.wsdd文件

deploy.wsdd文件

在webapp/WEB-INF目录下新建deploy.wsdd文件,如下:

在这里插入图片描述


<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">

    <!-- name: 服务名随便写。 -->
    <service name="OrderService" provider="java:RPC">
        <parameter name="className" value="com.iambest.study.axis.service.impl.OrderServiceImpl" />
        <!-- value表示哪些方法需要发布,*表示全部的public方法。 -->
        <!-- 如果想指定方法名,方法名与方法名用逗号隔开 -->
        <parameter name="allowedMethods" value="*" />
        <!-- 指定命名空间 -->
        <namespace>http://com.iambest.study.axis.service/OrderServiceHttpSoap11Endpoint</namespace>
    </service>
</deployment>

1.4、配置tomcat

1.4.1、配置tomcat-server

菜单栏:Edit Configurations , 点击+号,选择Tomcat Server --> Local, 如下:

在这里插入图片描述

在Server标签页下,Application server: 点击Configure,选择你本地的Tomcat 服务器的路径,如下:

在这里插入图片描述

然后选择Deploymen标签页,点击+号,选择当前的项目即可

在这里插入图片描述

1.4.2、配置web.xml 文件

web.xml文件新增如下的内容:

<!-- WebService接入配置  BEGIN -->
<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
</servlet-mapping>
<!-- WebService接入配置  END -->

1.5、生成server-config.wsdd文件

1.5.1、验证服务是否发布

直接启动tomcat,浏览器访问:http://127.0.0.1:8080/axis_study/services,显示如下的内容表示webservice服务发布成功了

在这里插入图片描述

1.5.2、生成server-config.wsdd文件

切换到tomcat的webapps目录下,我的是mac电脑,路径如下:/Users/david/Developer/apache-tomcat-8.5.98/webapps/axis_study/WEB-INF , 如果是别的电脑,则根据你的实际路径切换即可

执行如下的命令:

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -l http://127.0.0.1:8080/axis_study/services deploy.wsdd

显示如下,表示生成文件成功:

在这里插入图片描述

1.5.3、验证server-config.wsdd文件

将生成好的server-config.wsdd文件,复制到工程文件的WEB-INF目录下,和deploy.wsdd同级即可,然后重启tomcat,再次访问http://127.0.0.1:8080/axis_study/services ,显示如下表示成功生成server-config.wsdd文件

在这里插入图片描述

2、将axis集成到SpringBoot应用中去

2.1、新建springboot应用

新建springboot工程,将1.1.2章节的依赖添加到当前的pom.xml文件中,并将接口和实现类复制到当前的工程中,如下:

在这里插入图片描述

2.2、配置应用

2.2.1、复制server-config.wsdd文件

在resources目录下,新建WEB-INF文件夹,将1.5.2章节中生成的server-config.wsdd文件复制到WEB-INF目录下

2.2.2、新建AxisServiceConfig配置类

新建AxisServiceConfig配置类,内容如下:

package com.iambest.study.axis.config;

import org.apache.axis.transport.http.AxisServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AxisServiceConfig {

    @Bean
    public ServletRegistrationBean<AxisServlet> axisServletServletRegistrationBean() {
        ServletRegistrationBean<AxisServlet> axisServletServletRegistrationBean =
                new ServletRegistrationBean<>(new AxisServlet(),"/services/*");
        axisServletServletRegistrationBean.setName("AxisServlet");
        axisServletServletRegistrationBean.setLoadOnStartup(1);
        return axisServletServletRegistrationBean;
    }


}

2.2.3、新建EngineConfigurationFactoryServlet类

新建EngineConfigurationFactoryServlet类,必须放到org.apache.axis.configuration包路径下,内容入下:

package org.apache.axis.configuration;


import java.io.InputStream;
import javax.servlet.ServletConfig;

import org.apache.axis.AxisProperties;
import org.apache.axis.ConfigurationException;
import org.apache.axis.EngineConfiguration;
import org.apache.axis.EngineConfigurationFactory;
import org.apache.axis.components.logger.LogFactory;
import org.apache.axis.server.AxisServer;
import org.apache.axis.utils.ClassUtils;
import org.apache.axis.utils.Messages;
import org.apache.commons.logging.Log;

public class EngineConfigurationFactoryServlet extends EngineConfigurationFactoryDefault {

    protected static Log log =
            LogFactory.getLog(EngineConfigurationFactoryServlet.class.getName());

    private ServletConfig cfg;

    public static EngineConfigurationFactory newFactory(Object param) {

        return (param instanceof ServletConfig)
                ? new EngineConfigurationFactoryServlet((ServletConfig) param)
                : null;
    }

    protected EngineConfigurationFactoryServlet(ServletConfig conf) {
        super();
        this.cfg = conf;
    }

    @Override
    public EngineConfiguration getServerEngineConfig() {
        return getServerEngineConfig(cfg);
    }

    /**
     * Get a default server engine configuration in a servlet environment.
     *
     * @param cfg a ServletContext
     * @return a server EngineConfiguration
     */
    private static EngineConfiguration getServerEngineConfig(ServletConfig cfg) {
        String configFile = cfg.getInitParameter(OPTION_SERVER_CONFIG_FILE);
        if (configFile == null) {
            configFile = AxisProperties.getProperty(OPTION_SERVER_CONFIG_FILE);
        }
        if (configFile == null) {
            configFile = SERVER_CONFIG_FILE;
        }
        String appWebInfPath = "/WEB-INF";

        FileProvider config = null;
        String realWebInfPath = EngineConfigurationFactoryServlet.class.getResource(appWebInfPath).getPath();

        InputStream iss = ClassUtils.getResourceAsStream(EngineConfigurationFactoryServlet.class, appWebInfPath + "/" + SERVER_CONFIG_FILE);
        if (iss != null) {
            config = new FileProvider(iss);
        }

        if (config == null) {
            log.error(Messages.getMessage("servletEngineWebInfError03", ""));
        }

        if (config == null && realWebInfPath != null) {
            try {
                config = new FileProvider(realWebInfPath, configFile);
            } catch (ConfigurationException e) {
                log.error(Messages.getMessage("servletEngineWebInfError00"), e);
            }
        }

        /**
         * Fall back to config file packaged with AxisEngine
         */
        if (config == null) {
            log.warn(Messages.getMessage("servletEngineWebInfWarn00"));
            try {
                InputStream is =
                        ClassUtils.getResourceAsStream(AxisServer.class,
                                SERVER_CONFIG_FILE);
                config = new FileProvider(is);

            } catch (Exception e) {
                log.error(Messages.getMessage("servletEngineWebInfError02"), e);
            }
        }

        return config;
    }


}

最终的项目结构如下图所示:

在这里插入图片描述

2.3、启动并访问

启动springboot应用,并访问:http://127.0.0.1:8080/services路径,显示内容如下表示发布服务成功:

在这里插入图片描述

3、验证服务

3.1、获取wsdl文件

通过wget命令获取wsdl文件

wget -O OrderService.wsdl http://127.0.0.1:8080/services/OrderService?wsdl

文件获取成功,如下:
在这里插入图片描述

3.2、使用soapUI验证

导入刚才的wsdl文件后,发送请求信息,返回如下的信息,表示成功:

在这里插入图片描述

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

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

相关文章

基于springboot+vue+mysql员工宿舍管理系统

直达视频演示 技术栈 jdk8springboot vueelement-plusMySQL 包含功能点 管理员端 登录员工管理宿舍管理留言板管理物品报修管理公告管理 员工端 登录首页个人中心物品报修留言板 功能截图(部分) 管理员 管理员登录 员工管理 宿舍管理 物品报修管理 公告管理 留言管理 …

火山引擎ByteHouse:如何为OLAP设计高性能向量检索能力?

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 背景 随着 LLM 技术应用及落地&#xff0c;数据库需要提高向量分析以及 AI 支持能力&#xff0c;向量数据库及向量检索等能力“异军突起”&#xff0c;迎来业界持续…

Bytebase 签约 Vianova,助力欧洲城市交通智能平台中 Snowflake 和 PG 的变更自动化及版本控制

在数字化发展的浪潮中&#xff0c;自动化数据库变更管理成为提升产品上线效率、降低人为失误风险的关键工具&#xff0c;同时促进流程的一致性与标准化&#xff0c;确保合规性和变更的可追溯性。近日&#xff0c;数据库 DevOps 团队协同管理工具 Bytebase 签约欧洲交通数据管理…

【51单片机】LED的三个基本项目(LED点亮&LED闪烁&LED流水灯)(3)

前言 大家好吖&#xff0c;欢迎来到 YY 滴单片机系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过单片机的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…

synchoronized 为什么不能锁 int 或者 long 类型

前言 synchronized(Object) 不能用String常量 因为字符串常量是在内存中同一个地方。如果两个线程锁一个&#xff0c;可能导致死锁。一个线程多次可能导致重入。 也不能用Integer&#xff0c;Long等基础类型。 因为当锁定int或者long时&#xff0c; jvm就会调用Interger.valu…

VXLAN网关技术及应用实例详解

1.特性概述 VXLAN是VLAN扩展方案草案&#xff0c;是NVo3中的一种网络虚拟化技术。采用MAC in UDP封装方式&#xff0c;将二层报文用三层协议进行封装&#xff0c;可对二层网络在三层范围进行扩展&#xff0c;同时支持24bits的VNIID ( 16M租户能力&#xff09;&#xff0c;满足…

甲辰龙年,中国科技十大趋势

先给各位拜个早年。 年关岁末&#xff0c;各大科技厂商、研究机构纷纷发布自己研判的新年十大科技趋势。这些内容当然大有裨益&#xff0c;相信热爱科技的读者朋友也没少关注。 但说句掏心窝子的话&#xff0c;种种十大趋势看多了&#xff0c;不免发现两个问题&#xff0c;一个…

vite+vue3发布自己的npm组件+工具函数

记录一下个人最近一次发布npm组件的过程&#xff1a; 一、创建组件和工具函数 执行命令创建一个空项目&#xff1a; npm create vite 创建过程稍微有些慢&#xff0c;不知何故&#xff1f;其中选择vue , 个人暂时使用的JS 。在 src 目录下面创建一个文件 package 存放组件和公…

Antd+React+react-resizable实现表格拖拽功能

1、先看效果 2、环境准备 "dependencies": {"antd": "^5.4.0","react-resizable": "^3.0.4",},"devDependencies": {"types/react": "^18.0.33","types/react-resizable": "^…

【知识图谱+大模型的紧耦合新范式】Think-on-Graph:解决大模型在医疗、法律、金融等垂直领域的幻觉

Think-on-Graph&#xff1a;解决大模型在医疗、法律、金融等垂直领域的幻觉 Think-on-Graph 原理ToG 算法步骤&#xff1a;想想再查&#xff0c;查查再想实验结果 论文&#xff1a;https://arxiv.org/abs/2307.07697 代码&#xff1a;https://github.com/IDEA-FinAI/ToG Think…

【Linux系统学习】1.初识Linux

初识Linux 操作系统概述 初识Linux 虚拟机介绍 VMware WorkStation安装 1.操作系统概述 了解操作系统的作用 了解常见的操作系统 1.1 硬件和软件 计算机由哪两个主要部分组成&#xff1f; 硬件&#xff1a;计算机系统中由电子&#xff0c;机械和光电元件等组成的各种物理装置的…

AI专题:海外科技巨头指引,AI主线逻辑依旧坚挺

今天分享的是AI 系列深度研究报告&#xff1a;《AI专题&#xff1a;海外科技巨头指引&#xff0c;AI主线逻辑依旧坚挺》。 &#xff08;报告出品方&#xff1a;华西证券&#xff09; 报告共计&#xff1a;54页 本周热点:海外科技巨头指引&#xff0c;AI主线逻辑依旧坚挺 硬件…

2、ChatGPT 在数据科学中的应用

ChatGPT 在数据科学中的应用 ChatGPT 可以成为数据科学家的绝佳工具。以下是我所了解到的关于它擅长的地方和不那么擅长的地方。 我从使用 ChatGPT 中学到了一个教训。它在数据科学中非常有帮助,但你必须仔细检查它输出的所有内容。它非常适合某些任务,并且可以非常快速准确…

CSDN2024年我的创作纪念日1024天|不忘初心|努力上进|积极向前

CSDN2024年我的创作纪念日1024天| 学习成长机遇&#xff1a;学习成长收获&#xff1a;2023年度总结数据&#xff1a;2024新领域的探索&#xff1a;日常和自己的感慨&#xff1a;2024憧憬和规划&#xff1a;创作纪念日总结&#xff1a; 学习成长机遇&#xff1a; 大家好&#x…

Aigtek高精度电压源什么作用

高精度电压源是一种能够提供稳定、可靠且精确的电压输出的电子设备。它在科学研究、工程应用和制造业中起着至关重要的作用。以下将详细介绍高精度电压源的作用及其在不同领域的应用。 一、工作原理 稳定性&#xff1a;高精度电压源通常采用精密的电路设计和稳压技术&#xff0…

如何在Termux中使用Hexo结合内网穿透工具实现远程访问本地博客站点

文章目录 前言 1.安装 Hexo2.安装cpolar3.远程访问4.固定公网地址 前言 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并结合…

【openwrt】MT7981 5G WiFi MAC地址不生效问题分析及解决方案

问题描述 MT7981 默认sdk 5G MAC地址根据2.4G MAC地址随机生成,我们写到Factory区域的值不生效 问题分析 查看EEPROM MAC位置 查看MTK EEPROM文档MT7981_EEPROM_Content_Introduction_V10_20211207.pdf可以看到EEPROM里面有两个位置可以存放MAC,0x04~0x09 和0x0a~0x0f 查看…

【芯片设计- RTL 数字逻辑设计入门 6 -- 带同步复位的D触发器 RTL实现及testbench 验证】

文章目录 带同步复位的D触发器Verilog 代码testbench 代码编译及仿真问题小结 带同步复位的D触发器 同步复位 &#xff1a;复位只能发生在在clk信号的上升沿&#xff0c;若clk信号出现问题&#xff0c;则无法进行复位。 Verilog 代码 // timescale ins/1nsmodule flopr (inpu…

博途PLC报警字FC(字寄存器按位访问)

博途PLC的字寄存器按位访问和拆分,请查看下面文章链接: https://rxxw-control.blog.csdn.net/article/details/121727057https://rxxw-control.blog.csdn.net/article/details/121727057西门子触摸屏报警都是以字为地址访问,所以离散报警信号我们需要将其组合为报警字输出,…

docker重建镜像

DockerFile如下&#xff1a; FROM k8s-registry.qhtx.local/base/centos7-jdk8-haitong0704RUN yum -y update && yum install -y python3-devel && yum install -y python36 RUN mv /usr/bin/python /usr/bin/python_old RUN ln -s /usr/bin/python3 /usr/bi…