JAXB(Java Architecture for XML Binding)下载、使用

news2025/2/26 14:37:21

简介

JAXB(Java Architecture for XML Binding)就是XML数据绑定的java架构。JAXB可以根据XML Schema生成java类,也能根据java类生成XML Schema,XML数据绑定指定了XML请求和XML响应如何映射成java对象。
JAXB提供了API和工具,可以自动在XML文档和java对象之间映射。

JAXB框架可以使开发者进行如下操作:

  • 将XML内容解包为java表示。
  • 访问和更新java表示。
  • 将java表示的XML内容打包回XML内容。

JAXB为开发者提供了一个高效、标准的方式来映射XML和java代码。java开发者的效率可以更高,因为他们可以写更少的代码,而且不必是XML专家。JAXB使开发者结合XML和Web服务技术更加容易扩展他们的应用。

各版本参考资源

JAXB 2.0版本参考资源

https://jcp.org/en/jsr/detail?id=222
在这里插入图片描述
JAXB 2.3版本详情页:
https://jcp.org/aboutJava/communityprocess/mrel/jsr222/index3.html
在这里插入图片描述

从该页面可以下载规范文档、和javadoc文档:
在这里插入图片描述
在这里插入图片描述
JAXB 2.3版本规范:
https://download.oracle.com/otn-pub/jcp/jaxb-2_3-mrel3-eval-spec/JAXB-2.3-spec.pdf
在这里插入图片描述

JAXB 3.0版本参考资源

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

JAXB 4.0版本参考资源

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

JAXB参考实现

旧版本(已经归档,只读)

https://github.com/javaee/jaxb-v2

这个项目库2019年2月份已经归档了,现在只读。新的项目这已经转移到https://github.com/eclipse-ee4j/jaxb-ri
在这里插入图片描述

新版本

代码库:https://github.com/eclipse-ee4j/jaxb-ri
主页:https://eclipse-ee4j.github.io/jaxb-ri/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下载zip独立发行包版本

打开主页:https://eclipse-ee4j.github.io/jaxb-ri/
点击右边的Download,可以下载最新的版本,例如jaxb-ri-4.0.3.zip:
在这里插入图片描述

将下载下来的压缩包解压,目录结构为:
在这里插入图片描述

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

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

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

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

对JDK版本的要求

参考实现4.0.3版本需要Java SE 11及以上。

利用运行时绑定框架

Schema到Java:开发应用的基本步骤

Schema转Java是将1个或多个schema文件编译为生成java类的过程。用这种方式开发一个应用的基本步骤如下:

  • 开发或者定位到schema
  • 如果需要的话,用绑定定制化注解schema,或者将它们放在一个外部的绑定文件
  • 用xjc绑定编译器编译schema,生成java内容类
    在这里插入图片描述
  • 用上面生成的java内容类和jakarta.xml.bind运行时框架来开发JAXB应用
  • 设置CLASSPATH变量,将下面的jar文件包含到路径中
    https://eclipse-ee4j.github.io/jaxb-ri/4.0.3/docs/ch02.html#jars
    在这里插入图片描述

上面的jar文件在下载包解压后的mod子目录下可以找到:
在这里插入图片描述

  • 用javac编译所有的java源文件
  • 运行程序

Java到Schema:开发应用的基本步骤

Java到Schema是利用jakarta.xml.bind.annotation包中的注解来增强已经存在的java类的过程,由此JAXB运行时绑定框架可以进行解包/打包的操作。用这种方式开发一个应用的基本步骤如下:

  • 用java开发数据模型
  • 利用jakarta.xml.bind.annotation包中的注解来控制绑定过程
  • 设置CLASSPATH变量,将下面的jar文件包含到路径中
    https://eclipse-ee4j.github.io/jaxb-ri/4.0.3/docs/ch02.html#jars
    在这里插入图片描述
  • 用javac编译数据模型
  • 编译生成的class文件会包含自己手动增加的注解和JAXB绑定框架需要的其它默认注解
  • 用数据模型开发应用;编写代码,用JAXB运行时框架的打包/解包操作持久化数据模型
  • 编译、运行应用

xjc(根据xml schema生成java代码)

备注:xjc命令行脚本只存在于JAXB的zip独立发行包版本中。

拉起xjc的方式

以在Windows下使用为例,可以运行bin目录下的批处理文件xjc.bat、或者mod目录下的jaxb-xjc.jar文件来拉起xjc。

xjc.bat文件在解压包的bin子目录下:
在这里插入图片描述
jaxb-xjc.jar文件在解压包的mod子目录下:
在这里插入图片描述

运行xjc.bat文件,例如:
在这里插入图片描述

运行jaxb-xjc.jar文件,例如:
在这里插入图片描述

xjc语法

可以通过运行xjc.bat文件、或者jaxb-xjc.jar文件,后面加上-help参数,来查看具体的用法,有哪些选项。
也可以查询官网来了解具体用法:
https://eclipse-ee4j.github.io/jaxb-ri/4.0.3/docs/ch04.html#tools-xjc

xjc [OPTION]... <schema file/URL/dir/jar> [-b <binding>...]

在这里插入图片描述
在这里插入图片描述

举例

根据一个schema文件生成java文件

例如,在cmd窗口下执行如下命令:

xjc D:\temp\xmlschema\test.xsd -d D:\temp\outcode

其中:
D:\temp\xmlschema\test.xsd指定schema文件
-d D:\temp\outcode指定生成的java文件存放目录。注意,输出目录必须已经存在,xjc编译器不会创建。
在这里插入图片描述

schema文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<!--

    Copyright (c) 1997, 2021 Oracle and/or its affiliates. All rights reserved.

    This program and the accompanying materials are made available under the
    terms of the Eclipse Distribution License v. 1.0, which is available at
    http://www.eclipse.org/org/documents/edl-v10.php.

    SPDX-License-Identifier: BSD-3-Clause

-->

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:import namespace="http://www.w3.org/XML/1998/namespace"
             schemaLocation="http://www.w3.org/2001/xml.xsd"/>

  <xs:complexType name="foo">
    <xs:sequence>
      <xs:element name="age" type="xs:int"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="root" type="foo"/>

</xs:schema>

到输出目录下查看生成的内容:
在这里插入图片描述
其中generated是默认生成的包名。

在这里插入图片描述

生成的Foo.java文件的内容:

//
// 此文件是由 Eclipse Implementation of JAXB v4.0.3 生成的
// 请访问 https://eclipse-ee4j.github.io/jaxb-ri 
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
//


package generated;

import jakarta.xml.bind.annotation.XmlAccessType;
import jakarta.xml.bind.annotation.XmlAccessorType;
import jakarta.xml.bind.annotation.XmlType;


/**
 * <p>foo complex type的 Java 类。
 * 
 * <p>以下模式片段指定包含在此类中的预期内容。
 * 
 * <pre>{@code
 * <complexType name="foo">
 *   <complexContent>
 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       <sequence>
 *         <element name="age" type="{http://www.w3.org/2001/XMLSchema}int"/>
 *       </sequence>
 *     </restriction>
 *   </complexContent>
 * </complexType>
 * }</pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "foo", propOrder = {
    "age"
})
public class Foo {

    protected int age;

    /**
     * 获取age属性的值。
     * 
     */
    public int getAge() {
        return age;
    }

    /**
     * 设置age属性的值。
     * 
     */
    public void setAge(int value) {
        this.age = value;
    }

}

生成的ObjectFactory.java文件的内容:

//
// 此文件是由 Eclipse Implementation of JAXB v4.0.3 生成的
// 请访问 https://eclipse-ee4j.github.io/jaxb-ri 
// 在重新编译源模式时, 对此文件的所有修改都将丢失。
//


package generated;

import javax.xml.namespace.QName;
import jakarta.xml.bind.JAXBElement;
import jakarta.xml.bind.annotation.XmlElementDecl;
import jakarta.xml.bind.annotation.XmlRegistry;


/**
 * This object contains factory methods for each 
 * Java content interface and Java element interface 
 * generated in the generated package. 
 * <p>An ObjectFactory allows you to programmatically 
 * construct new instances of the Java representation 
 * for XML content. The Java representation of XML 
 * content can consist of schema derived interfaces 
 * and classes representing the binding of schema 
 * type definitions, element declarations and model 
 * groups.  Factory methods for each of these are 
 * provided in this class.
 * 
 */
@XmlRegistry
public class ObjectFactory {

    private static final QName _Root_QNAME = new QName("", "root");

    /**
     * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: generated
     * 
     */
    public ObjectFactory() {
    }

    /**
     * Create an instance of {@link Foo }
     * 
     * @return
     *     the new instance of {@link Foo }
     */
    public Foo createFoo() {
        return new Foo();
    }

    /**
     * Create an instance of {@link JAXBElement }{@code <}{@link Foo }{@code >}
     * 
     * @param value
     *     Java instance representing xml element's value.
     * @return
     *     the new instance of {@link JAXBElement }{@code <}{@link Foo }{@code >}
     */
    @XmlElementDecl(namespace = "", name = "root")
    public JAXBElement<Foo> createRoot(Foo value) {
        return new JAXBElement<>(_Root_QNAME, Foo.class, null, value);
    }

}

schemagen(根据java文件生成schema)

备注:schemagen命令行脚本只存在于JAXB的zip独立发行包版本中。

介绍

schemagen可以处理java源文件、或者class文件。

拉起schemagen的方式

以windows为例,可以运行bin目录下的schemagen.bat文件来拉起schemagen。
如果java源文件或者类文件引用了其它的类,那么被引用的类必须通过系统环境变量CLASSPATH可以访问到,否则就必须在工具命令中通过-classpath/ -cp可选参数来指定。
例如:
在这里插入图片描述

schemagen语法

介绍

schemagen [-options ...] <java files>

可以通过官网查看命令参数详细介绍:
https://eclipse-ee4j.github.io/jaxb-ri/4.0.3/docs/ch04.html#tools-schemagen
在这里插入图片描述

或者执行schemagen -help命令查看帮助信息:
在这里插入图片描述

查看帮助信息

执行命令:

schemagen -help

在这里插入图片描述

查看版本信息

执行命令:

schemagen -version

在这里插入图片描述

查看完整版本信息

执行命令:

schemagen -fullversion

在这里插入图片描述

举例

根据java源文件生成schema文件

java源文件的内容如下。其中属性name用了JavaBeans样式(get和set),属性age用了JAXB的注释:

package com.thb;

import jakarta.xml.bind.annotation.XmlElement;

public class Demo {

    private String name;

    @XmlElement
    private int age;

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

执行命令及输出:

schemagen D:\temp\eclipse-workspace\java_work\java_test2\src\com\thb\Demo.java -d D:\temp\outschema

其中 -d D:\temp\outschema指定了生成的schema文件、class文件的存放路径。
在这里插入图片描述
到outschema目录下查看生成的内容:
在这里插入图片描述
可以看到,生成了schema文件schema1.xsd,另外,也将java源文件编译成了class文件。

打开生成的schema1.xsd文件,内容如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:complexType name="demo">
    <xs:sequence>
      <xs:element name="age" type="xs:int"/>
      <xs:element name="name" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

通过maven下载JAXB的Eclipse实现

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

  <dependencies>
    <dependency>
      <groupId>jakarta.xml.bind</groupId>
      <artifactId>jakarta.xml.bind-api</artifactId>
      <version>4.0.0</version>
    </dependency>
    <dependency>
      <groupId>com.sun.xml.bind</groupId>
      <artifactId>jaxb-impl</artifactId>
      <version>4.0.3</version>
    </dependency>
  </dependencies>

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

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

相关文章

有了Spring为什么还需要SpringBoot呢

目录 一、Spring缺点分析 二、什么是Spring Boot 三、Spring Boot的核心功能 3.1 起步依赖 3.2 自动装配 一、Spring缺点分析 1. 配置文件和依赖太多了&#xff01;&#xff01;&#xff01; spring是一个非常优秀的轻量级框架&#xff0c;以IOC&#xff08;控制反转&…

WPF中DataGrid控件绑定数据源

步骤 创建数据源&#xff1a;首先&#xff0c;我们需要创建一个数据源&#xff0c;可以是一个集合&#xff08;如List、ObservableCollection等&#xff09;&#xff0c;也可以是一个DataTable对象。数据源中的每个元素代表一行数据。 设置DataGrid的ItemsSource属性&#xff…

el-select的某一项选中后显示id

环境: vue3element-plus 今天在使用elementui的下拉组件的时候发现有一个选项在选中后显示的是id.找了会没看到问题,后来想到会不会是没有设置key的原因(之前看到说vue3可以不用设置key),果然加上key就可以了

电容笔哪个厂家的产品比较好?开学季值得买电容笔

现在&#xff0c;几乎每个人都有一个ipad平板&#xff0c;可以帮助你解决很多工作和学习上的难题&#xff0c;比如工作时的整理文档&#xff0c;做一些简单的PPT&#xff0c;以及在学习上记录笔记等等。所以&#xff0c;用一支好用的电容笔来搭配iPad是非常重要的。在这里&…

【2023华为杯A题】WLAN网络信道接入机制建模(代码、思路.....)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

sed的不同执行方式

1. 命令行执行多条sed命令 1.1 命令行通过多条-e选项 sed -e command1 -e command2 -e command3 匹配root或nobody&#xff0c;或mail&#xff1a; sed -n -e /^root/ p -e /^nobody/ p -e /^mail/p /etc/passwd 1.2 用\换行 Shell的换行符依然有效&#xff0c;这有利于…

【vue】vue+easyPlayer 实现宫格布局及视频播放

由于业务需要&#xff0c;ant-design-vue框架集成easyPlayer.js作为视频播放器。EasyPlayer.js H5播放器&#xff0c;是一款能够同时支持HTTP、HTTP-FLV、HLS&#xff08;m3u8&#xff09;、WS视频直播与视频点播等多种协议&#xff0c;支持H.264、H.265、AAC等多种音视频编码格…

在线安装qt5.15之后任意版本

下载qt现在安装包&#xff1a; window安装包链接 进入cmd&#xff0c;用命令行打开安装包&#xff0c;并指定组件下载地址&#xff08;这个是关键&#xff0c;之前用的是腾讯镜像&#xff0c;出现了版本灰色无法选中问题&#xff09; .\qt-unified-windows-x64-4.6.1-online…

代码签名:保护你的软件的安全性和完整性

代码签名是一种数字签名技术&#xff0c;用于保护软件的完整性和身份。它通过使用一个密钥对软件代码进行签名&#xff0c;确保代码在下载和安装过程中没有被篡改。代码签名证书是一种数字证书&#xff0c;用于证明代码签名者的身份和代码的完整性。以下是代码签名证书如何保护…

【多思路附源码持续更新】2023年华为杯(中国研究生数学建模)竞赛C题

赛题 若官网拥挤&#xff0c;数据集和赛题下载地址如下&#xff1a; https://download.csdn.net/download/weixin_47723732/88364777 大规模创新类竞赛评审方案研究 现在创新类竞赛很多&#xff0c;其中规模较大的竞赛&#xff0c;一般采用两阶段&#xff08;网评、现场评审&a…

网页编辑软件Whisk mac中文版功能介绍

Whisk for Mac中文版是一款网页编辑器&#xff0c;Whisk mac版具有实时预览&#xff0c;可在您键入时更新。Whisk是您工具包中用于HTML&#xff0c;PHP&#xff0c;CSS和javascript编程的必备应用程序。 Whisk for Mac功能介绍 预览窗格使用与Safari相同的引擎快速按输入内容呈…

vue框架实现表情打分效果

本来今天要实现这个功能 但是在网上查了一下 就csdn上有一个符合要求的 但是他竟然收费,痛心疾首啊 太伤白嫖党的心的 所以我手写了一个这个类似功能的代码 希望能帮到有这个需求的同学们 技术栈是VUE3 用其他技术栈的也可以看 因为逻辑很简单都一样的 // 问卷的虚拟数据 con…

wait函数

#include <sys/types.h> #include <sys/wait.h> pid_t wait(int *wstatus); 功能&#xff1a;等待任意一个子进程结束&#xff0c;如果该子进程结束了&#xff0c;此函数会回收子进程的资源 参数&#xff1a; -int *wstatus&#xff1a;进程退出时的状态信息&…

CentOS在应用程序菜单中创建快捷方式

背景&#xff1a; 在CentOS系统中&#xff0c;安装一些应用软件的时候&#xff0c;我们可能会自定义安装路径&#xff1b;这样在安装完应用程序后&#xff0c;在“Application”下&#xff0c;可能找不到对应的快捷键&#xff1b;这是就需要手动去创建跨界方式。 应用&#xf…

【笔记】离线Ubuntu20.04+mysql 5.7.36 + xtrabackup定时增量备份脚本

一、环境 ● Ubuntu版本查看 lsb_release -a● mysql 版本查看 mysql --version我的是ubuntu 20.04&#xff0c;mysql是5.7.36&#xff0c;所以要用 install_percona-xtrabackup-24 二、原理 备份 通过ubuntu自带的定时器运行增量备份脚本备份文件可以存储在映射后的其他…

成集云 | 用友NC集成旺店通ERP(旺店通主管供应链)| 解决方案

源系统成集云目标系统 方案介绍 用友NC是用友NC产品的全新系列&#xff0c;是面向集团企业的世界级高端管理软件。它以“全球化集团管控、行业化解决方案、全程化电子商务、平台化应用集成”的管理业务理念而设计&#xff0c;采用J2EE架构和先进开放的集团级开发平台…

SQL Server 数据库变成单个用户怎么办

参考技术A 1、首先我们打开SQL SERVER的管理控制台&#xff0c;找到一个要设置角色的用户。 2、下面我们将为这个用户赋予创建数据库的角色&#xff0c;我们先用这个用户登录管理工具看一下是否具有创建用户的权限。 3、进行数据库创建的时候&#xff0c;提示如下的错误&…

JavaBean文字格斗游戏(面向对象编程)的个人重写以及个人解释

题目和个人思路: 先写role类(对象)和构造方法(要按照标准的JavaBean来写) 根据题意,类中要有一个行为(方法)->攻击 开始进入main中, 首先当然是要创建两个对象,然后调用(攻击)attack方法 以上都是个人经过学习后重新又写的代码. 望各位指出不足.

Git错误解决:如何处理“could not determine hash algorithm“问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

在 Linux 上运行 macOS?OSX-KVM 助你梦想成真!| 开源日报 No.36

isocpp/CppCoreGuidelines Stars: 39.4k License: NOASSERTION C Core Guidelines 是一个由 Bjarne Stroustrup 领导的协作项目&#xff0c;旨在帮助人们有效地使用现代 C。该指南侧重于较高级别的问题&#xff0c;如接口、资源管理、内存管理和并发性&#xff0c;并鼓励应用程…