当前位置: 首页 > news >正文

JAXB:根据Java文件生成XML schema文件

说明

JAXB有个schemagen脚本,可以根据Java文件生成XML schema。这个工具在JAXB独立发布包中有,可以从官网下载JAXB的独立发布包:
https://eclipse-ee4j.github.io/jaxb-ri/
在这里插入图片描述

示例

使用schemagen -d <path> <java files>格式

其中-d <path>指明了XML schema文件的输出路径
如果要生成schema的Java文件没有引用外部的Java文件,可以使用这种方式。

例如,根据下面这个Java类生成XML schema文件。

package com.thb.server.register;import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;// 使用了JAXB注解,映射到xml中的request元素
@XmlRootElement(name = "request")
@XmlType(propOrder = {"reqtype", "secret", "enterpriseAccount"})
public class RegisterRequest {private String reqtype;private String secret;private String enterpriseAccount;// 使用了JAXB注解,映射到xml中的reqtype元素@XmlElement(name="reqtype", required = true)public String getReqtype() {return this.reqtype;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setReqtype(String reqtype) {this.reqtype = reqtype;}// 使用了JAXB注解,映射到xml中的secret元素@XmlElement(name="secret", required = true)public String getSecret() {return this.secret;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setSecret(String secret) {this.secret = secret;}// 使用了JAXB注解,映射到xml中的body元素@XmlElement(name = "body", required = true)public String getEnterpriseAccount() {return this.enterpriseAccount;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setEnterpriseAccount(String enterpriseAccount) {this.enterpriseAccount = enterpriseAccount;}
}

在cmd窗口下执行命令

schemagen -d D:\temp\outschema D:\temp\eclipse-workspace\java_work\powe
r-restful-webservice-server\src\main\java\com\thb\server\register\RegisterRequest.java

在这里插入图片描述

生成的XML schema文件的内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="request" type="registerRequest"/><xs:complexType name="registerRequest"><xs:sequence><xs:element name="reqtype" type="xs:string"/><xs:element name="secret" type="xs:string"/><xs:element name="body" type="xs:string"/></xs:sequence></xs:complexType>
</xs:schema>

使用schemagen -d <path> -cp <path> <java files>格式

其中-cp <path>指明了classpath,注意<path>中不包含包名。
如果要XML schema文件的Java文件引用了外部类,要使用-cp <path>指明寻找路径。

例如,下面是要生成XML schema文件的Java文件,Java的属性seeContent引用了一外部类SeeContent:

package com.thb.server.topology;import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlRootElement;
import jakarta.xml.bind.annotation.XmlType;// 使用了JAXB注解,映射到xml中的request元素
@XmlRootElement(name = "request")
@XmlType(propOrder = {"reqtype", "secret", "seeContent"})
public class TopologyRequest {private String reqtype;private String secret;private SeeContent seeContent;// 使用了JAXB注解,映射到xml中的reqtype元素@XmlElement(name="reqtype", required = true)public String getReqtype() {return this.reqtype;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setReqtype(String reqtype) {this.reqtype = reqtype;}// 使用了JAXB注解,映射到xml中的secret元素@XmlElement(name="secret", required = true)public String getSecret() {return this.secret;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值public void setSecret(String secret) {this.secret = secret;}// 使用了JAXB注解,映射到xml中的body元素@XmlElement(name="body", required = true)public SeeContent getSeeContent() {return this.seeContent;}public void setSeeContent(SeeContent seeContent) {this.seeContent = seeContent;}
}

外部类SeeContent的定义:

package com.thb.server.topology;import jakarta.xml.bind.annotation.XmlElement;
import jakarta.xml.bind.annotation.XmlType;@XmlType(propOrder = {"userid", "seeid", "upseeid", "status"})
class SeeContent{private String userid;private String seeid; private String upseeid;private String status;// 使用了JAXB注解,映射到xml中body元素下面的userid元素@XmlElement(name="userid", required = true)String getUserid() {return this.userid;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值void setUserid(String userid) {this.userid = userid;}// 使用了JAXB注解,映射到xml中body元素下面的seeid元素@XmlElement(name="seeid", required = true)String getSeeid() {return this.seeid;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值void setSeeid(String seeid) {this.seeid = seeid;}// 使用了JAXB注解,映射到xml中body元素下面的upseeid元素@XmlElement(name="upseeid", required = true)String getUpseeid() {return this.upseeid;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值void setUpseeid(String upseeid) {this.upseeid = upseeid;}// 使用了JAXB注解,映射到xml中body元素下面的status元素@XmlElement(name="status", required = true)String getStatus() {return this.status;}// 此处的setter函数要有,否则从xml反序列到java对象的时候无法赋值void setStatus(String status) {this.status = status;}
}

在cmd窗口下执行命令:

schemagen -d D:\temp\outschema -cp D:\temp\eclipse-workspace\java_work\
power-restful-webservice-server\src\main\java D:\temp\eclipse-workspace\java_work\power-restful-webservice-server\src\main\java\com\thb\server\topology\TopologyRequest.java

在这里插入图片描述

生成的XML schema文件的内容:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"><xs:element name="request" type="topologyRequest"/><xs:complexType name="topologyRequest"><xs:sequence><xs:element name="reqtype" type="xs:string"/><xs:element name="secret" type="xs:string"/><xs:element name="body" type="seeContent"/></xs:sequence></xs:complexType><xs:complexType name="seeContent"><xs:sequence><xs:element name="userid" type="xs:string"/><xs:element name="seeid" type="xs:string"/><xs:element name="upseeid" type="xs:string"/><xs:element name="status" type="xs:string"/></xs:sequence></xs:complexType>
</xs:schema>

相关文章:

JAXB:根据Java文件生成XML schema文件

说明 JAXB有个schemagen脚本&#xff0c;可以根据Java文件生成XML schema。这个工具在JAXB独立发布包中有&#xff0c;可以从官网下载JAXB的独立发布包&#xff1a; https://eclipse-ee4j.github.io/jaxb-ri/ 示例 使用schemagen -d <path> <java files>格式 …...

opencv(5): 滤波器

滤波的作用&#xff1a;一幅图像通过滤波器得到另一幅图像&#xff1b;其中滤波器又称为卷积核&#xff0c;滤波的过程称为卷积。 锐化&#xff1a;边缘变清晰 低通滤波&#xff08;Low-pass Filtering&#xff09;&#xff1a; 目标&#xff1a;去除图像中的高频成分&#…...

《微信小程序开发从入门到实战》学习二十二

3.3 开发创建投票页面 3.3.10 使用switch开关组件 用switch开关组件增加一个设置是否匿名投票的功能。 switch常用属性如下&#xff1a; checked 开还是关&#xff0c;默认false关 disabled 是否禁用&#xff0c;默认false不禁用&#xff0…...

LLM模型-讯飞星火与百度文心api调用

spark-wenxin 1-讯飞星火1_1-SparkApi.py1_2- Chat_spark.py1_3-调用api 2-百度文心2_1.code 3-两者之间比较与openai 1-讯飞星火 进入讯飞官网进行创建应用&#xff0c;获取相关密钥APPID&#xff0c;APISecret&#xff0c;APIKey&#xff0c;选择最新版本 首次调用讯飞官方a…...

AIGC ChatGPT 4 将数据接口文件使用Python进行入库Mysql

数据分析,数据处理的过程,往往将采集到的数据,或者从生产库过来的接口文件,我们都需要进行入库操作。 如下图数据: 将这样的数据接口文件,进行入库,插入到Mysql数据库中。 用Python代码来完成。 ChatGPT4来完成代码输入。 ChatGPT4完整内容如下: 这个任务可以使用`…...

Loguru:一个超酷的Python库

在项目中&#xff0c;了解代码运行情况至关重要&#xff0c;特别是遇到Bug需要排除问题的时候&#xff0c;而这正是日志记录发挥作用的地方。对于Python开发者来说&#xff0c;Loguru是一个简单但功能强大的日志记录库&#xff0c;它使得跟踪代码的行为变得轻松而高效。 什么是…...

cloud的概念

"Cloud"&#xff08;云&#xff09;通常指的是云计算&#xff08;cloud computing&#xff09;领域。云计算是一种通过网络&#xff08;通常是互联网&#xff09;提供计算资源和服务的模型。这些计算资源包括计算能力、存储空间、数据库、网络、分析能力等。云计算模…...

物联网赋能:WIFI HaLow在无线连接中的优势

在探讨无线网络连接时&#xff0c;我们不难发现&#xff0c;WIFI已经成为我们日常生活中不可或缺的一部分&#xff0c;承载了半数以上的互联网流量&#xff0c;并在家庭、学校、娱乐场所等各种场合广泛应用。然而&#xff0c;尽管WIFI4、WIFI5和WIFI6等协议无处不在&#xff0c…...

淘宝商品详情数据接口(Taobao.item_get)

淘宝商品详情接口是一种程序化的接口&#xff0c;允许开发者根据商品ID或商品链接&#xff0c;获取淘宝平台上的商品详细信息。通过这个接口&#xff0c;开发者可以方便地获取商品的标题、价格、销量、描述等数据&#xff0c;进而提供给用户进行展示和购买。 使用淘宝商品详情…...

视频剪辑方法:一键批量调整色调的高效技巧

在视频剪辑的过程中&#xff0c;色调调整是一项非常重要的工作。它能够改变影片的氛围、情感和视觉效果&#xff0c;更好地沉浸在影片的情境中。然而&#xff0c;对于许多视频剪辑师来说&#xff0c;批量调整色调是一项非常繁琐的任务&#xff0c;需要耗费大量的时间和精力。色…...

NAS层协议栈学习笔记

NAS(Non-Access Stratum)是无线网络中非接入层及包括移动性管理(MM)和会话管理(SM)协议 &#xff0c;在5G(NR)系统中连接管理(Connection Management)用于建立和释放UE与AMF之间的控制面(CP)信令连接。 5G中移动性管理是通过NAS信令在UE与核心网之间进行交互的&#xff0c;连接…...

前端食堂技术周刊第 105 期:TS 5.3 RC、Vite 5.0、W3C 新任 CEO、有害的 Pinia 模式、2024 更快的 Web

美味值&#xff1a;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f;&#x1f31f; 口味&#xff1a;金桂普洱 食堂技术周刊仓库地址&#xff1a;https://github.com/Geekhyt/weekly 大家好&#xff0c;我是童欧巴。欢迎来到前端食堂技术周刊&#xff0c;我们先来看下…...

jenkins 使用原生 git clone 命令,指定ssh密钥文件

使用环境变量 GIT_SSH_COMMAND 从Git版本2.3.0可以使用环境变量GIT_SSH_COMMAND&#xff0c;如下所示&#xff1a; GIT_SSH_COMMAND"ssh -i ~/.ssh/id_rsa_example" git clone example请注意&#xff0c;-i有时可以被您的配置文件覆盖&#xff0c;在这种情况下&…...

cobol数据类型

数据类型 数据部&#xff08;data division&#xff09;是用来描述程序中使用的变量的。 data name 数据名称 数据名称必须在数据部中定义&#xff0c;才能在过程部中使用。必须有一个用户自定义的名称&#xff0c;不能使用关键字&#xff0c;为存储实际数据的存储单元提供引…...

Java Web——JS中的BOM

1. Web API概述 Web API 是指浏览器提供的一套接口&#xff0c;这些接口允许开发人员使用 JavaScript&#xff08;JS&#xff09;来操作浏览器功能和页面元素。通过 Web API&#xff0c;开发人员可以与浏览器进行交互&#xff0c;以实现更复杂的功能和效果。 1.1. 初识Web AP…...

三十分钟学会Hive

Hive的概念与运用 Hive 是一个构建在Hadoop 之上的数据分析工具&#xff08;Hive 没有存储数据的能力&#xff0c;只有使用数据的能力&#xff09;&#xff0c;底层由 HDFS 来提供数据存储&#xff0c;可以将结构化的数据文件映射为一张数据库表&#xff0c;并且提供类似 SQL …...

云计算发展

云计算&#xff0c;作为当今信息技术领域的核心力量&#xff0c;正在快速推动着我们社会的数字化转型。从智能家居到无人驾驶&#xff0c;从虚拟现实到人工智能&#xff0c;云计算的应用无处不在&#xff0c;它不仅仅是一个技术概念&#xff0c;更是一种全新的生活方式。在这个…...

vulhub redis-4-unacc

环境搭建 cd vulhub/redis/4-unacc docker-compose up -d 漏洞复现 检测 redis-cli -h ip 使用redis工具 工具地址&#xff1a;https://github.com/vulhub/redis-rogue-getshell 下载完成后&#xff0c;先进入RedisModulesSDK/exp/ 目录进行make操作 获得exp.so后可以进行…...

风火编程--playwright爬虫

playwright爬虫基本用法 等待加载 page.wait_for_load_state(‘networkidle’) text page.content() 点击 demo with sync_playwright() as pw:browser pw.chromium.launch(headlessTrue)context browser.new_context()page context.new_page()page.goto(url)page.wait…...

CSS的选择器(一篇文章齐全)

目录 Day26&#xff1a;CSS的选择器 1、CSS的引入方式 2、CSS的选择器 2.1 基本选择器​编辑 2.2 组合选择器 2.3 属性选择器 2.4 伪类选择器 2.5 样式继承 2.6 选择器优先级 3、CSS的属性操作 3.1 文本属性 3.2 背景属性 3.3 边框属性 3.4 列表属性 3.5 dispal…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

React Native 导航系统实战(React Navigation)

导航系统实战&#xff08;React Navigation&#xff09; React Navigation 是 React Native 应用中最常用的导航库之一&#xff0c;它提供了多种导航模式&#xff0c;如堆栈导航&#xff08;Stack Navigator&#xff09;、标签导航&#xff08;Tab Navigator&#xff09;和抽屉…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

Python如何给视频添加音频和字幕

在Python中&#xff0c;给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加&#xff0c;包括必要的代码示例和详细解释。 环境准备 在开始之前&#xff0c;需要安装以下Python库&#xff1a;…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...