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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

4-5学生分数对应的成绩

![#include<stdio.h> int main(){float score;char grade;for(int i0;i<7;i){printf("请输入成绩&#xff1a;");scanf("%f",&score);while(score>100||score<0){printf("\n输入的成绩有误&#xff0c;请重新输入&#xff1a;&quo…

「实体京东」:汽车行业里的一盘棋

在消费升级&#xff0c;产业愈发蓬勃发展的未来&#xff0c;不仅是汽车行业&#xff0c;在接下来的一众工业细分方向&#xff0c;供应链的重构和进化都将成为新的主旋律&#xff0c;串点成链&#xff0c;串链成网&#xff0c;通过对成本、效率、体验的重构&#xff0c;进而真正…

5年经验之谈 —— 如何编写有效的接口测试?

简介&#xff1a; 在所有的开发测试中&#xff0c;接口测试是必不可少的一项。有效且覆盖完整的接口测试&#xff0c;不仅能保障新功能的开发质量&#xff0c;还能让开发在修改功能逻辑的时候有回归的能力&#xff0c;同时也是能优雅地进行重构的前提。编写接口测试要遵守哪些原…

css animation 动画如何保留动画结束后的状态 animation-fill-mode: forwards

css animation 动画如何保留动画结束后的状态 animation-fill-mode: forwards 一、问题描述 在做一个弹窗动画提示的时候遇到了一个问题&#xff1a; 在动画结束的时候&#xff0c;移除元素时会有闪一下的问题&#xff0c;像这样&#xff0c;有残留的痕迹。 我的动画结尾是这…

WebLOAD: 一站式性能测试工具

WebLOAD 是一款一站式前端性能测试工具&#xff0c;对测试人员来说使用非常方便。 它可以帮助前端工程师和测试快速对网页进行性能测试和优化&#xff0c;提高网页加载速度&#xff0c;减少页面卡顿和闪烁。 WebLOAD的特点、使用指南以及企业实际使用中的案列。 WebLOAD的特…

Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案

Nessus扫描结果出现在TE.IO或者ES容器结果查看问题解决方案 也是昨天晚上折腾了一个晚上到凌晨四点多,实在没有头绪,在论坛,贴吧,各种求助查贴,没有什么人解决.后面请教了一个安全圈的大佬朋友给解决了. 我的问题是在kali上的,所以只写了kali 的解决方案: 修改插件: vim /opt/…

零代码编程:用ChatGPT将SRT字幕文件批量转为Word文本文档

一个文件夹中有多个srt视频字幕文件&#xff0c;srt文件里面有很多时间轴&#xff1a; 现在想将其批量转为word文档&#xff0c;去掉里面与字符无关的时间轴&#xff0c;在ChatGPT中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;要完成一个批量将SRT字幕文件转为…

R语言:利用biomod2进行生态位建模

在这里主要是分享一个不错的代码&#xff0c;喜欢的可以慢慢研究。我看了一遍&#xff0c;觉得里面有很多有意思的东西&#xff0c;供大家学习和参考。 利用PCA轴总结的70个环境变量&#xff0c;利用biomod2进行生态位建模&#xff1a; #------------------------------------…

【计算机网络学习之路】UDP socket编程

文章目录 前言一. 网络通信本质端口号TCP与UDP网络字节序 二. socket编程接口socket()和sockaddr结构体 三. 简单echo服务结束语 前言 本系列文章是计算机网络学习的笔记&#xff0c;欢迎大佬们阅读&#xff0c;纠错&#xff0c;分享相关知识。希望可以与你共同进步。 一. 网…

安卓:Android Studio4.0~2023中正确的打开Android Device Monitor

Android Studio4.0~2023 中如何正确的打开Android Device Monitor(亲测有效) 前些天买了新电脑&#xff0c;安装了新版本的Android Studio4.0想试一试&#xff0c;结果就出现了一些问题。 问题引出&#xff1a; Android Device Monitor在工具栏中找不到&#xff0c;后来上网查…

基于nbiot的矿车追踪定位系统(论文+源码)

1.系统设计 鉴于智能物联网的大趋势&#xff0c;本次基于窄带物联网的矿车追踪定位系统应具备以下功能&#xff1a; &#xff08;1&#xff09;实现实时定位&#xff0c;真正实现矿车随时随地定位; &#xff08;2&#xff09;定位精度高&#xff0c;采用该系统可以实现矿车在…

dump备份命令

dump备份文件系统&#xff0c;或者目录 文件系统有等级划分&#xff0c;0为全部备份&#xff0c;1.针对上一次有变动的文件进行备份&#xff0c;以此类崔 目录备份&#xff1a;只有一个等级0&#xff0c; 针对文件系统类型有要求ext2&#xff0c;ext3&#xff0c;如果是其他…

数据分析基础之《jupyter notebook工具》

一、安装库 1、linux库 yum install python3-devel 2、python库 pip3 install -U matplotlib pip3 install -U numpy pip3 install -U pandas pip3 install -U TA-Lib pip3 install -U tables pip3 install -U notebook 3、如果TA-Lib安装不上&#xff0c;先手动安装依赖库 …

Servlet---上传文件

文章目录 上传文件的方法上传文件的示例前端代码示例后端代码示例 上传文件的方法 上传文件的示例 前端代码示例 <body><form action"upload" method"post" enctype"multipart/form-data"><input type"file" name&qu…

transformer学习资料

一、NLP 自然语言处理 NLP 是机器学习在语言学领域的研究&#xff0c;专注于理解与人类语言相关的一切。NLP 的目标不仅是要理解每个单独的单词含义&#xff0c;而且也要理解这些单词与之相关联的上下文之间的意思。 常见的NLP 任务列表&#xff1a; 对整句的分类&#xff1…

【C/PTA】函数专项练习(一)

本文结合PTA专项练习带领读者掌握函数&#xff0c;刷题为主注释为辅&#xff0c;在代码中理解思路&#xff0c;其它不做过多叙述。 目录 6-1 输出星期名6-2 三整数最大值6-3 数据排序6-4 多项式求值 6-1 输出星期名 请编写函数&#xff0c;根据星期数输出对应的星期名。 函数原…

xss漏洞挖掘

xss漏洞挖掘 以xss-challenge第二关为例 输入123 查看网页源代码 发现value值原样返回 手动挖掘 此处发现尖括号和双引号闭合完整&#xff0c;因此可以直接使用<script>alert(/xss/)</script>测试 发现提交过后标签内容被双引号闭合进去了 因此此处需要将标签…

CAS还能这样理解??

1.CAS全称 全称&#xff1a;compare and swap&#xff0c;比较并交换。 虽然翻译过来是[比较并交换]&#xff0c;但它是一个原子性的操作&#xff0c;对应到CPU指令为cmpxchg。 2.通俗理解CAS CAS 有三个操作数:当前值A、内存值V、要修改的新值B。假设 当前值A 跟 内存值V 相…

高并发分布式架构的演进之路

目录 单体架构 应用数据分离架构 应用数据集群架构 读写分离 / 主从分离架构 引⼊缓存⸺冷热分离架构 垂直分库 业务拆分-微服务 单体架构 一个系统初期&#xff0c;我们需要利⽤我们精⼲的技术团队&#xff0c;快速将业务系统投⼊市场进⾏检验&#xff0c;并且可以迅速…