基于XML的Web服务Java接口(JAX-WS)、Jakarta XML Web Services Eclipse 实现

news2024/11/17 0:29:33

简介

JAX-WS(Java API for XML-Based Web Services),是创建web服务的Java编程接口,特别是SOAP服务。是Java XML编程接口之一,是Java SE 和Java EE 平台的一部分。
JAX-WS 2.0 规范是代替JAX-RPC 1.0的下一代Web服务API。JAX-RPC(The Java API for XML Based RPC)是基于XML的RPC(远程过程调用)的Java API。
JAX-WS 2.0 使用JAXB(The Java Architecture for XML Binding)进行XML数据绑定,所谓绑定就是指XML请求和XML响应如何映射成java对象。

参考资源

JAX-WS 2.0参考资源

https://jcp.org/en/jsr/detail?id=224
在这里插入图片描述

https://jakarta.ee/specifications/xml-web-services/2.3/
在这里插入图片描述

JAX-WS 3.0参考资源

https://jakarta.ee/specifications/xml-web-services/3.0/
在这里插入图片描述

JAX-WS 4.0参考资源

https://jakarta.ee/specifications/xml-web-services/4.0/
在这里插入图片描述

Jakarta Web Services Metadata

Jakarta Web Services Metadata项目是Jakarta XML Web Services 项目的一部分,它用Java为web 服务定义了一个编程模型。

代码库:https://github.com/jakartaee/jws-api
在这里插入图片描述

Jakarta Web Services Metadata 3.0 Specification Document (HTML):
https://jakarta.ee/specifications/web-services-metadata/3.0/ws-metadata-spec-3.0

Jakarta Web Services Metadata 3.0 Javadoc:
https://jakarta.ee/specifications/web-services-metadata/3.0/apidocs/jakarta.jws/module-summary.html

参考实现

旧项目(已经归档、只读)

https://javaee.github.io/metro-jax-ws/
在这里插入图片描述

https://github.com/javaee/metro-jax-ws
在这里插入图片描述
在这里插入图片描述

新项目(Jakarta XML Web Services Eclipse 实现)

主页:
https://eclipse-ee4j.github.io/metro-jax-ws/
在这里插入图片描述

代码库:
https://github.com/eclipse-ee4j/metro-jax-ws
在这里插入图片描述
XML web服务的Eclipse 实现是一个web服务框架,它为最终用户和中间件开发者开发web服务解决方案提供了工具和基础设施(infrastructure)。
使用XML web服务的Eclipse 实现,客户端和web有一个大的优势:Java编程语言的平台无关性。

Jakarta XML Web Services Eclipse 实现需要的软件

  • Java SE 11或以后版本
  • Ant 1.10.6或以后版本
  • 在GlassFish v7.x 、Apache Tomcat 10.1.x下测试过

安装Jakarta XML Web Services Eclipse 实现

下载Jakarta XML Web Services Eclipse实现独立zip发布包

打开主页:https://eclipse-ee4j.github.io/metro-jax-ws/
在这里插入图片描述
点击右侧的Download就可以下载独立发布包,例如,下载jaxws-ri-4.0.0.zip。
解压后的目录:
在这里插入图片描述

bin子目录下的内容:
在这里插入图片描述

docs子目录下的内容:
在这里插入图片描述

lib子目录下的内容:
在这里插入图片描述

samples子目录下的内容:
在这里插入图片描述

安装到Tomcat中

设置CATALINA_HOME环境变量,指向Tomcat的安装目录,例如:
在这里插入图片描述
在这里插入图片描述
在cmd窗口,切换到Jakarta XML Web Services Eclipse实现解压后的目录,例如:D:\jaxws-ri-4.0.0\jaxws-ri
在这里插入图片描述

这个目录下有build.xml文件:
在这里插入图片描述

运行ant install命令。这个命令其实执行了两个大的操作:

  • 拷贝Jakarta XML Web Services Eclipse实现lib子目录下的jar文件到Tomcat安装目录下面的/shared/lib子目录中
  • 更新Tomcat安装目录下面/conf/catalina.properties文件中的属性shared.loader,使之等于${catalina.home}/shared/lib/*.jar

build.xml文件片段:

<target name="install" depends="update-catalina-props" description="Install XML-WS RI 4.0.0 jars">
    <echo message="Installing XML-WS RI 4.0.0 for ${catalina.home} ..."/>

    <mkdir dir="${catalina.lib.home}"/>
    <copy toDir="${catalina.lib.home}" overwrite="true">
        <fileset dir="${basedir}/lib" includes="*.jar"/>
    </copy>

</target>

<target name="update-catalina-props">
    <echo message="Backing up ${catalina.home}/conf/catalina.properties..."/>
    <copy file="${catalina.home}/conf/catalina.properties" tofile="${catalina.home}/conf/catalina.properties.backup"/>
    <echo message="Adding XML-WS RI jars to shared.loader property in ${catalina.home}/conf/catalina.properties..."/>
    <replace file="${catalina.home}/conf/catalina.properties" token="shared.loader=" value="shared.loader=$${catalina.home}/shared/lib/*.jar,"/>
</target>

执行ant install命令的窗口输出信息:
在这里插入图片描述

Jakarta XML Web Services Eclipse 实现依赖的jar包

https://eclipse-ee4j.github.io/metro-jax-ws/4.0.0/docs/release-documentation.html#jar-dependency
在这里插入图片描述

SOAP1.1+HTTP样例:运行fromjava样例(来自Jakarta XML Web Services Eclipse实现发布包)

说明

fromjava这个样例演示了从一个Java service endpoint的实现开始,如何构建、部署、调用一个简单的web服务。其中Java service endpoint的实现使用了Java注释。
在这里插入图片描述

fromjava的目录结构:
在这里插入图片描述

服务实现类只有一个方法addNumbers,输入两个整数,返回一个整数,抛出AddNumbersException异常:
在这里插入图片描述

运行web服务有两种方式:

  • 在servlet容器中运行
  • 作为一个j2se webservice endpoint运行(不需要servlet容器)

运行方式一:在tomcat容器中运行web服务

设置环境变量JAXWS_HOME指向JAX-WS的安装目录

在这里插入图片描述

在cmd窗口切换到fromjava的目录

在这里插入图片描述

运行ant clean

运行ant clean的作用是删掉${build.home}目录。其中${build.home}目录指向${basedir}/build,就是fromjava/build目录。(其实这个命令不运行也可以,因为下一步运行ant server命令的时候其中含有ant clean的步骤)
在这里插入图片描述

运行ant server -Dtomcat=true

运行ant server -Dtomcat=true的作用是构建、部署web服务的WAR包,因为要将web服务运行在tomcat中,所以加了-Dtomcat=true这个属性。这个命令做了四个工作:

<target name="server" depends="setup">

    <antcall target="clean"/>

    <antcall target="build-server-java"/>

    <antcall target="create-war"/>

    <antcall target="deploy"/>
</target>

运行输出:
在这里插入图片描述
在这里插入图片描述

现在fromjava目录下的文件布局(注:照理${env.AS_HOME}这个目录不应该生成的,对我们没有什么用):

D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\FROMJAVA
│  build.xml
│  Readme.txt
│  
├─${env.AS_HOME}
│  └─domains
│      └─domain1
│          └─autodeploy
│                  jaxws-fromjava.war
│                  
├─build
│  ├─classes
│  │  └─fromjava
│  │      └─server
│  │          │  AddNumbersException.class
│  │          │  AddNumbersImpl.class
│  │          │  AddWebservice.class
│  │          │  EndpointStopper$1.class
│  │          │  EndpointStopper.class
│  │          │  
│  │          └─jaxws
│  │                  AddNumbers.class
│  │                  AddNumbers.java
│  │                  AddNumbersExceptionBean.class
│  │                  AddNumbersExceptionBean.java
│  │                  AddNumbersResponse.class
│  │                  AddNumbersResponse.java
│  │                  
│  └─war
│          jaxws-fromjava.war
│          
├─etc
│      deploy-targets.xml
│      sun-jaxws.xml
│      web.xml
│      
└─src
    └─fromjava
        ├─client
        │      AddNumbersClient.java
        │      
        └─server
                AddNumbersException.java
                AddNumbersImpl.java
                AddWebservice.java
                EndpointStopper.java

<tomcat安装目录>/webapps下查看,war包已经拷贝过来了:
在这里插入图片描述

运行tomcat

因为生成客户端代码的时候要访问web服务动态生成的wsdl文件,所以要先启动tomcat。
在这里插入图片描述
在这里插入图片描述

<tomcat安装目录>/webapps下查看,war包已经被自动部署了:
在这里插入图片描述

部署以后的文件布局:

D:\APACHE-TOMCAT-10.1.13\WEBAPPS\JAXWS-FROMJAVA
├─META-INF
│      MANIFEST.MF
│      war-tracker
│      
└─WEB-INF
    │  sun-jaxws.xml
    │  web.xml
    │  
    └─classes
        └─fromjava
            └─server
                │  AddNumbersException.class
                │  AddNumbersImpl.class
                │  AddWebservice.class
                │  EndpointStopper$1.class
                │  EndpointStopper.class
                │  
                └─jaxws
                        AddNumbers.class
                        AddNumbers.java
                        AddNumbersExceptionBean.class
                        AddNumbersExceptionBean.java
                        AddNumbersResponse.class
                        AddNumbersResponse.java

看看wsdl文件能否正常生成

访问http://localhost:8080/jaxws-fromjava/addnumbers?wsdl
可以看到,正常生成了wsdl文件。生成客户端代码的时候,就要访问这个wsdl的地址。
在这里插入图片描述

<?xml version='1.0' encoding='UTF-8'?><!-- Published by XML-WS Runtime (https://github.com/eclipse-ee4j/metro-jax-ws). Runtime's version is XML-WS Runtime 4.0.0 git-revision#129f787. --><!-- Generated by XML-WS Runtime (https://github.com/eclipse-ee4j/metro-jax-ws). Runtime's version is XML-WS Runtime 4.0.0 git-revision#129f787. --><definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://server.fromjava/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://server.fromjava/" name="AddNumbersImplService">
<types>
<xsd:schema>
<xsd:import namespace="http://server.fromjava/" schemaLocation="http://localhost:8080/jaxws-fromjava/addnumbers?xsd=1"/>
</xsd:schema>
</types>
<message name="addNumbers">
<part name="parameters" element="tns:addNumbers"/>
</message>
<message name="addNumbersResponse">
<part name="parameters" element="tns:addNumbersResponse"/>
</message>
<message name="AddNumbersException">
<part name="fault" element="tns:AddNumbersException"/>
</message>
<portType name="AddNumbersImpl">
<operation name="addNumbers">
<input wsam:Action="http://server.fromjava/AddNumbersImpl/addNumbersRequest" message="tns:addNumbers"/>
<output wsam:Action="http://server.fromjava/AddNumbersImpl/addNumbersResponse" message="tns:addNumbersResponse"/>
<fault message="tns:AddNumbersException" name="AddNumbersException" wsam:Action="http://server.fromjava/AddNumbersImpl/addNumbers/Fault/AddNumbersException"/>
</operation>
</portType>
<binding name="AddNumbersImplPortBinding" type="tns:AddNumbersImpl">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="addNumbers">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
<fault name="AddNumbersException">
<soap:fault name="AddNumbersException" use="literal"/>
</fault>
</operation>
</binding>
<service name="AddNumbersImplService">
<port name="AddNumbersImplPort" binding="tns:AddNumbersImplPortBinding">
<soap:address location="http://localhost:8080/jaxws-fromjava/addnumbers"/>
</port>
</service>
</definitions>

运行ant clean

运行ant clean:
在这里插入图片描述

运行ant client

运行ant client的目的是为了生成客户端代码并编译:

<target name="generate-client" depends="setup">
    <wsimport
            debug="true"
            verbose="${verbose}"
            keep="true"
            destdir="${build.classes.home}"
            package="fromjava.client"
            wsdl="http://localhost:8080/jaxws-fromjava/addnumbers?wsdl">
    </wsimport>
</target>

<target name="client" depends="generate-client">
    <javac
            fork="true"
            srcdir="${basedir}/src"
            destdir="${build.classes.home}"
            includes="**/client/**,**/common/**">
        <classpath refid="jaxws.classpath"/>
    </javac>
</target>

在这里插入图片描述

运行后,客户端代码布局:

D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\FROMJAVA\BUILD
├─classes
│  └─fromjava
│      └─client
│              AddNumbers.class
│              AddNumbers.java
│              AddNumbersClient.class
│              AddNumbersException.class
│              AddNumbersException.java
│              AddNumbersException_Exception.class
│              AddNumbersException_Exception.java
│              AddNumbersImpl.class
│              AddNumbersImpl.java
│              AddNumbersImplService.class
│              AddNumbersImplService.java
│              AddNumbersResponse.class
│              AddNumbersResponse.java
│              ObjectFactory.class
│              ObjectFactory.java
│              package-info.class
│              package-info.java
│              
└─war

运行ant run

执行ant run表示运行客户端。

<target name="run">
    <java fork="true" classname="fromjava.client.AddNumbersClient">
        <classpath>
            <path refid="jaxws.classpath"/>
            <pathelement location="${build.classes.home}"/>
            <pathelement location="${basedir}/etc"/>
        </classpath>
    </java>
</target>

在这里插入图片描述

运行方式二:作为一个j2se webservice endpoint运行(不运行在servlet容器中)

运行ant clean server-j2se

运行ant clean server-j2se生成服务端代码,并且用Endpoint API来部署:

<target name="server-j2se" depends="setup">
    <antcall target="clean"/>

    <antcall target="build-server-java"/>

    <echo message="Starting endpoint... To stop: ant server-j2se-stop "/>

    <java fork="true" classname="fromjava.server.AddWebservice">
        <classpath>
            <path refid="jaxws.classpath"/>
            <pathelement location="${build.classes.home}"/>
        </classpath>
    </java>
</target>

在这里插入图片描述

生成的文件布局:

D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\FROMJAVA\BUILD
├─classes
│  └─fromjava
│      └─server
│          │  AddNumbersException.class
│          │  AddNumbersImpl.class
│          │  AddWebservice.class
│          │  EndpointStopper$1.class
│          │  EndpointStopper.class
│          │  
│          └─jaxws
│                  AddNumbers.class
│                  AddNumbers.java
│                  AddNumbersExceptionBean.class
│                  AddNumbersExceptionBean.java
│                  AddNumbersResponse.class
│                  AddNumbersResponse.java
│                  
└─war

访问http://localhost:8080/jaxws-fromjava/addnumbers?wsdl
可以正常生成wsdl文件:

在这里插入图片描述

运行ant clean client run

另外打开一个cmd窗口,运行ant clean client run,目的是在根据endpoint发布的wsdl文件生成客户端代码、编译、并且运行。
在这里插入图片描述
在这里插入图片描述

运行后,客户端的代码布局:
D:\JAXWS-RI-4.0.0\JAXWS-RI\SAMPLES\FROMJAVA\BUILD
├─classes
│ └─fromjava
│ └─client
│ AddNumbers.class
│ AddNumbers.java
│ AddNumbersClient.class
│ AddNumbersException.class
│ AddNumbersException.java
│ AddNumbersException_Exception.class
│ AddNumbersException_Exception.java
│ AddNumbersImpl.class
│ AddNumbersImpl.java
│ AddNumbersImplService.class
│ AddNumbersImplService.java
│ AddNumbersResponse.class
│ AddNumbersResponse.java
│ ObjectFactory.class
│ ObjectFactory.java
│ package-info.class
│ package-info.java

└─war

运行ant server-j2se-stop,停止web服务

<target name="server-j2se-stop" depends="setup">
    <get src="http://localhost:9090/stop" dest="stop.status"/>
</target>

在这里插入图片描述

Jakarta XML Web Services Eclipse实现下载方式二:用maven下载

在maven工程的pom.xml文件中增加如下依赖:

  <dependencies>
    <dependency>
      <groupId>jakarta.xml.ws</groupId>
      <artifactId>jakarta.xml.ws-api</artifactId>
      <version>4.0.0</version>
    </dependency>
    <dependency>
      <groupId>com.sun.xml.ws</groupId>
      <artifactId>jaxws-rt</artifactId>
      <version>4.0.0</version>        
    </dependency>
  </dependencies>

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

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

相关文章

红蓝对抗——信息收集

文章目录 1. 基础篇1.1 企业架构收集1.2 ICP 备案查询1.3 DNS 解析记录1.4 网络汇测1.5 C段收集1.6 证书收集1.7 接口收集1.8 APK信息收集1.9 公众号信息收集1.10 站点敏感信息收集1.11 供应链/业务链收集1.12 人员信息收集1.13 Google1.14 github信息收集 2. 进阶篇2.1 子域名…

C++ 异常和错误处理机制:如何使您的程序更加稳定和可靠

在C编程中&#xff0c;异常处理和错误处理机制是非常重要的。它们可以帮助程序员有效地处理运行时错误和异常情况。本文将介绍C中的异常处理和错误处理机制。 什么是异常处理&#xff1f; 异常处理是指在程序执行过程中发生异常或错误时&#xff0c;程序能够捕获并处理这些异常…

【打靶】vulhub打靶系列(一)—小白视野的渗透测试

主机探测 arpscan arp-scan -l 另一种方法arping for i in $(seq 1 200); do sudo arping -c 1 192.168.56.$i; done 注意这个必须是root权限 ​ 端口探测 nmap nmap -p- -sV -T4 192.168.56.104 发现8080端口 web测试 访问下web页面 1、通过逻辑点绕过 发送到xia_sq…

gitlab查看、修改用户和邮箱,gitlab生成密钥

查看用户、邮箱 git config user.name git config user.email 修改用户、邮箱 git config --global user.name “xxx” git config --global user.email “xxxxxx.com” 生成ssh密钥 ssh-keygen -t rsa -C “xxxxxx.com” 查看SSH秘钥 cat ~/.ssh/id_rsa.pub 将秘钥复制&…

Redis数据类型——set类型数据介绍及操作

1.set类型介绍及基本操作 2.set类型数据的扩展操作

2023年5个美国代理IP推荐,最佳代理花落谁家?

美国代理IP指的是代理服务器位于美国的IP地址&#xff0c;对于跨境业务来说&#xff0c;这些代理IP地址可以用于隐藏用户的真实IP地址&#xff0c;将其网络流量路由通过美国的服务器&#xff0c;以实现一些特定的目的。由于近年来&#xff0c;面向美国市场的跨境商家越来越多&a…

Spring无法加载静态属性和SpringBoot单元测试指定加载配置文件

一、Spring无法加载静态属性&#xff0c;怎么解决&#xff1f; Spring主要用于管理和注入Bean&#xff08;对象&#xff09;的实例属性&#xff0c;而不是静态属性。静态属性属于类本身&#xff0c;而不是类的实例&#xff0c;因此Spring的依赖注入机制不会处理它们。 看图&a…

力扣:138. 随机链表的复制(Python3)

题目&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff0c;其中每个新节点的值都设为其对应的原节点…

【Linux】Centos yum源替换

YUM是基于RPM包管理&#xff0c;能够从指定的服务器自动下载RPM包并且安装&#xff0c;可以自动处理依赖性关系&#xff0c;并且一次安装所有依赖的软件包&#xff0c;无须繁琐地一次次下载、安装。 CentOS 8操作系统版本结束了生命周期&#xff08;EOL&#xff09;&#xff0…

设备保修小程序开发制作方案

设备保修小程序定位为一款专业的设备保修服务平台&#xff0c;旨在为用户提供便捷、高效、优质的设备保修服务。 一、用户需求 用户需要快速了解设备的保修政策和流程。 用户需要方便地提交保修申请和查询保修进度。 用户需要及时获取设备的维修信息和维修结果。 用户需要对设…

【鸿蒙软件开发】自定义弹窗(CustomDialog)

文章目录 前言一、创建自己第一个自定义弹窗1.1 创建自定义弹窗1.2 创建构造器&#xff0c;与装饰器呼应相连CustomDialogController参数详解函数介绍open() close() 1.3 点击与onClick事件绑定的组件使弹窗弹出 二、示例代码总结 前言 自定义弹窗&#xff08;CustomDialog&am…

Pycharm 中 py 文件预设 文件头部信息

文章目录 一、设置模板步骤&#xff1a;二、其他 一、设置模板步骤&#xff1a; “文件File–设置Settings–编辑器Editor–File and Code Templates- Python Script” 里面设置模板 二、其他 其他可用的预定义文件模板变量为&#xff1a; $ {PROJECT_NAME} - 当前项目的名称…

语雀暂别8小时:探究P0级故障幕后原因及补偿策略揭晓!

作者&#xff1a;苍何&#xff0c;CSDN 2023 年 实力新星&#xff0c;前大厂高级 Java 工程师&#xff0c;阿里云专家博主&#xff0c;土木转码&#xff0c;现任部门技术 leader&#xff0c;专注于互联网技术分享&#xff0c;职场经验分享。 &#x1f525;热门文章推荐&#xf…

攻防世界-web-FlatScience

1. 题目描述 打开链接&#xff0c;看到如下界面 界面上的链接都点击下&#xff0c;发现都是一些英文论文 这些暂时是我们从界面上能发现的全部信息了 2. 思路分析 && 解题过程 2.1 先将网站使用nikto命令扫描一下 我们发现除了显式的界面外&#xff0c;还有两个隐藏…

基于MATLAB的Simulink搭建一阶低通滤波器

一、一阶低通滤波的原理 式子中的α作为滤波系数&#xff0c;X ( n ) 为本次的采样值&#xff0c;Y ( n − 1 ) 为上次滤波的输出值&#xff0c;Y ( n ) 为本次滤波后的输出值 一阶低通滤波器是一种常用的信号处理算法&#xff0c;用于去除高频噪声和平滑信号。其基本原理是通过…

4.2 QPainter的绘图接口介绍(上)

4.2 QPainter的接口介绍(上) 上一篇文章中讲述了在哪里绘图,怎么开始绘制,怎么跟绘制设备绑定、解绑等基础知识,今天就来点实操的,下面坐好了,开始阅读吧。 下图是《C++ GUI Programming with Qt 4》这本书中列出的关于QPainter常用的画图方法,基本上都是以draw开头,…

用libuv实现遍历文件系统

熟悉的陌生人 Node.js可能无人不知无人不晓&#xff0c;但Node.js底层实现libuv&#xff0c;恐怕认识的同学就不多了。 libuv是一个跨平台的高性能的异步I/O库&#xff0c;也是是一个网络I/O扩展库&#xff0c;是一个高性能事件驱动的程序库&#xff0c;封装了Windows和Unix平…

【C++】继承 ⑩ ( 继承机制中的 static 静态成员 | 子类中访问父类静态成员的方法 )

文章目录 一、继承机制中派生类中的 static 关键字1、子类继承父类静态成员2、父类静态成员访问控制权限的改变3、子类如何访问父类静态成员4、静态成员使用要点 二、完整代码示例 一、继承机制中派生类中的 static 关键字 1、子类继承父类静态成员 子类继承父类静态成员 : 父类…

Java商城免费搭建 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城

涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis …