使用OpenJDK 11运行JAXB xjc编译器

如文章“ 要从Java 11中删除的API ”所述,JDK 11不再包含 JAXB实现。 在本文中,我将结合使用JAXB ( 用于XML绑定的Java体系结构 ) 参考实现提供的xjc编译器和OpenJDK 11,将XML模式文件编译为Java类。

在Java SE 6之前,想要与Java SE应用程序一起使用JAXB的开发人员需要单独获取JAXB实现,因为Java发行版未提供该实现。 从Java SE 6开始,Java包含一个JAXB实现。 在许多情况下这很方便,但是当开发人员希望使用比JDK所提供的版本更高或不同的JAXB 实现时,事情会变得有些困难 。 当OpenJDK 9引入了模块化时, JAXB实现被移到了java.xml.bind模块中 ,并标记为不推荐 删除 。 JAXB实现 与JDK 11一起全部删除 。 这篇文章探讨了在OpenJDK 11中使用JAXB的xjc编译器 。

由于JDK 11不再包含JAXB的实现,因此必须单独购买一个。 在本文中,我将使用2.3.0版的JAXB参考实现 。 本文中使用的JDK版本是JDK 11.0.2 General-Availability Release 。

在不带参数的情况下运行xjc脚本会导致将帮助/用法呈现到标准输出中。

Usage: xjc [-options ...] <schema file/URL/dir/jar> ... [-b <bindinfo>] ...
If dir is specified, all schema files in it will be compiled.
If jar is specified, /META-INF/sun-jaxb.episode binding file will be compiled.
Options:-nv                :  do not perform strict validation of the input schema(s)-extension         :  allow vendor extensions - do not strictly follow theCompatibility Rules and App E.2 from the JAXB Spec-b <file/dir>      :  specify external bindings files (each <file> must have its own -b)If a directory is given, **/*.xjb is searched-d <dir>           :  generated files will go into this directory-p <pkg>           :  specifies the target package-m <name>          :  generate module-info.java with given Java module name-httpproxy <proxy> :  set HTTP/HTTPS proxy. Format is [user[:password]@]proxyHost:proxyPort-httpproxyfile <f> :  Works like -httpproxy but takes the argument in a file to protect password -classpath <arg>   :  specify where to find user class files-catalog <file>    :  specify catalog files to resolve external entity referencessupport TR9401, XCatalog, and OASIS XML Catalog format.-readOnly          :  generated files will be in read-only mode-npa               :  suppress generation of package level annotations (**/package-info.java)-no-header         :  suppress generation of a file header with timestamp-target (2.0|2.1)  :  behave like XJC 2.0 or 2.1 and generate code that doesnt use any 2.2 features.-encoding <encoding> :  specify character encoding for generated source files-enableIntrospection :  enable correct generation of Boolean getters/setters to enable Bean Introspection apis -disableXmlSecurity  :  disables XML security features when parsing XML documents -contentForWildcard  :  generates content property for types with multiple xs:any derived elements -xmlschema         :  treat input as W3C XML Schema (default)-dtd               :  treat input as XML DTD (experimental,unsupported)-wsdl              :  treat input as WSDL and compile schemas inside it (experimental,unsupported)-verbose           :  be extra verbose-quiet             :  suppress compiler output-help              :  display this help message-version           :  display version information-fullversion       :  display full version informationExtensions:-Xinject-code      :  inject specified Java code fragments into the generated code-Xlocator          :  enable source location support for generated code-Xsync-methods     :  generate accessor methods with the 'synchronized' keyword-mark-generated    :  mark the generated code as @javax.annotation.Generated-episode <FILE>    :  generate the episode file for separate compilation-Xpropertyaccessors :  Use XmlAccessType PROPERTY instead of FIELD for generated classes

xjc编译器脚本(bash文件和DOS批处理文件)很方便调用jaxb-xjc.jar 。 脚本将其作为可执行JAR ( java -jar )调用,如以下摘录所示:

  • Windows版本( xjc.bat ):
    %JAVA% %XJC_OPTS% -jar "%JAXB_HOME%\lib\jaxb-xjc.jar" %*
  • Linux版本( xjc.sh ):
    exec "$JAVA" $XJC_OPTS -jar "$JAXB_HOME/lib/jaxb-xjc.jar" "$@"

如上面的脚本摘录所示,Java启动器的调用中包含一个环境变量XJC_OPTS 。 不幸的是,不能简单地通过-classpath将JAXB参考实现JAR添加到类路径中,因为使用java -jar 运行可执行的JAR仅遵循通过MANIFEST.MFClass-Path (该条目存在于jaxb-ri-2.3.0.jar作为“ Class-Path: jaxb-core.jar jaxb-impl.jar ”)。

一种解决方法是修改脚本以将JAR用作常规JAR(不带-jar )并显式执行类XJCFacade ,以便可以将类路径显式提供给Java启动器 。 Windows xjc.bat脚本xjc.bat进行了演示:

%JAVA% -cp C:\lib\javax.activation-api-1.2.0.jar;C:\jaxb-ri-2.3.0\lib\jaxb-xjc.jar com.sun.tools.xjc.XJCFacade %*

除了JAXB参考实现JAR javax.activation-api-1.2.0.jar ,我还需要在类路径中包括javax.activation-api-1.2.0.jar JAR,因为JavaBeans应用程序框架 ( JAF )是JDK也不再提供的依赖项(通过删除JAXB的同一JEP 320删除)。

当然,也可能根本不使用XJC脚本,而是直接运行Java启动器。 该脚本确保设置了环境变量JAXB_HOME 。 该环境变量应指向JAXB参考实现扩展到的目录。

通过这些更改,可以使用JDK 11在命令行上针对XSD执行JAXB xjc编译器。

翻译自: https://www.javacodegeeks.com/2019/01/running-jaxb-xjc-compiler-with-openjdk-11.html

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

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

相关文章

光纤收发器模块如何选购,光纤收发器模块选购原则

光纤收发器的光模块模块选购一直是许多人心中的难题&#xff0c;为了使大家能挑到好的产品&#xff0c;今日飞畅科技的小编就来为大家好好说说光纤收发器的光模块如何选购&#xff0c;感兴趣的朋友就跟随小编一起来看看吧&#xff01; 一、光纤收发器光模块如何选购&#xff1…

光纤收发器哪个发射,那个接收?

当我们远距离传输时&#xff0c;通常会使用光纤来传输。因为光纤的传输距离很远&#xff0c;一般来说单模光纤的传输距离在10千米以上&#xff0c;而多模光纤的传输距离最高也能达到2千米。而在光纤网络中&#xff0c;我们常常会使用到光纤收发器。那么&#xff0c;在使用光纤收…

python打包exe原理_pyinstaller打包python文件成exe(原理.安装.问题)

py文件打包成exe文件的方式一共有三种&#xff1a;py2exe、PyInstaller和cx_Freeze本文分四个步骤来详讲如何用PyInstaller将py文件打包成exe文件1.PyInstaller 简介2.PyInstaller 安装3.将py文件打包成exe文件4.PyInstaller打包常见问题一. PyInstaller简介1.python相关文件介…

光纤收发器有什么用?光纤收发器的作用是什么?

光纤收发器是光通信系统所必须的一款产品设备&#xff0c;它的主要作用是将短距离的双绞线电信号和长距离的光信号进行互换的以太网传输媒体转换单元。那么&#xff0c;光纤收发器有什么用&#xff1f;光纤收发器的作用是什么呢&#xff1f;接下来我们就跟随飞畅科技的小编来一…

如何利用光衰减器测试光纤收发器的灵敏度?

光纤收发器的灵敏度可以说是光纤收发器的一个重要指标&#xff0c;了解如何测试光纤接收器的灵敏度是一项很重要的技能。当光输入功率在一定范围内时&#xff0c;光纤接收器的性能最佳。但是如何来判断光纤收发器是否会在最低光输入功率时&#xff0c;提供最佳性能呢&#xff1…

关于交换机和路由器的区别介绍

交换机&#xff08;又名交换式集线器&#xff09;&#xff0c;是一种用于电&#xff08;光&#xff09;信号转发的网络设备&#xff0c;它可以为接入交换机的任意两个网络节点提供独享的电信号通路。交换机的作用可以理解为将一些机器连接起来组成一个局域网。而路由器与交换机…

什么是节点光端机?总线型光端机有哪些优势?

节点式光端机又称总线型光端机&#xff0c;其准确的定义是采用单/双纤链路式组网形式的图像传输系统&#xff0c;也被称为链路式光端机。那么&#xff0c;节点式光端机具体是什么呢&#xff1f;总线型光端机又有哪些优势呢&#xff1f;接下来我们就跟随飞畅科技的小编一起来详细…

mysql 备份html数据_MySQL自动化生成HTML页面(导出数据)极限SQL编程-sql文件怎么打开...

今日客户要求表内的数据依据某种分组生成HTML页面进行展示&#xff0c;一般处理这种需求直接上编程工具就好了&#xff0c;从数据库里读取数据&#xff0c;根据规则生成字符串&#xff0c;最后将字符串写出到文件。由于需求比较急&#xff0c;作为数据库编程系列文章&#xff0…

什么是数据光端机?数据光端机的作用有哪些?

数据光端机&#xff0c;电信非压缩光端机&#xff0c;就是将多个E1&#xff08;一种中继线路的数据传输标准&#xff0c;通常速率为2.048Mbps&#xff0c;此标准为中国和欧洲采用&#xff09;信号变成光信号并传输的设备。那么&#xff0c;什么是数据光端机&#xff1f;数据光端…

spring创建web项目_使用Spring WS创建合同优先的Web服务

spring创建web项目1引言 本文介绍了如何使用来实现和测试SOAP Web服务 Spring Web Services项目 。 本示例将JAXB2用于&#xff08;取消&#xff09;编组。 为了开发服务&#xff0c;我将使用合同优先的方法&#xff0c;该方法首先定义服务合同&#xff0c;然后基于此合同实施…

什么是网络光端机?网络光端机工作原理及功能介绍!

网络光端机&#xff0c;就是光信号传输的终端设备。由于目前技术的提高&#xff0c;光纤价格的降低使它在各个领域得到很好的应用。在远程光纤传输中&#xff0c;光缆对信号的传输影响很小&#xff0c;光纤传输系统的传输质量主要取决于光端机的质量&#xff0c;因为光端机负责…

以太网交换机的用途有哪些?

交换机的主要功能包括物理编址、网络拓扑结构、错误校验、帧序列以及流控。交换机还具备了一些新的功能&#xff0c;如对VLAN&#xff08;虚拟局域网&#xff09;的支持、对链路汇聚的支持&#xff0c;甚至有的还具有防火墙的功能。接下来就由飞畅科技的小编带大家详细了解下交…

交换机主要分为哪几类?

交换机&#xff08;Switch&#xff09;意为“开关”是一种用于电&#xff08;光&#xff09;信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。其他常见的还有电话语音交换机、光纤交换机等。 从广义上来看&…

java编程彩球滑梯作弊_课内资源 - 基于C++的学生成绩管理系统

1 系统分析1.1 学生成绩管理系统介绍班主任管家软件以学生信息、课程信息为基础&#xff0c;以品行表现成绩(辅导员、班主任、班级评议成绩)和业务课程成绩为评价依据&#xff0c;每学期评定一次奖学金&#xff0c;奖学金作为学生评定各种荣誉的主要依据&#xff0c;并将各种评…

交换机工作原理介绍

交换机是一种用于电&#xff08;光&#xff09;信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。最常见的交换机是以太网交换机。交换机工作于OSI参考模型的第二层&#xff0c;即数据链路层。交换机拥有一条高带宽的背部总线和内部交换矩阵&am…

bitmap的java原理_布隆算法的原理及JAVA实现

Bloom Filter是由Bloom在1970年提出的一种多哈希函数映射的快速查找算法。通常应用在一些需要快速判断某个元素是否属于集合&#xff0c;但是并不严格要求100%正确的场合。Bloom Filter是一种空间效率很高的随机数据结构&#xff0c;它利用位数组很简洁地表示一个集合&#xff…

什么是语音复用设备?

语音复用设备是一种小容量、多业务的复用及传输设备&#xff0c;它能为用户提供综合的通信功能&#xff0c;满足用户对电话、数据以及计算机网络连接的实际需要。它的多种传输方式使其能灵活的应用在各种通信网络中&#xff1a;可以作为光电一体化综合通信业务接入设备&#xf…

截断整型提升算数转换

文章目录 &#x1f680;前言&#x1f680;截断&#x1f680;整型提升✈️整型提升是怎样的 &#x1f680;算术转换 &#x1f680;前言 大家好啊&#xff01;这里阿辉补一下前面操作符遗漏的地方——截断、整型提升和算数转换 看这一篇要先会前面阿辉讲的数据的存储否则可能看不…

java如何通过grpc连接etcd_grpc通过 etcd 实现服务发现与注册-源码分析

介绍下面介绍 jupiter-0.2.7 版本中 grpc 通过 etcd 实现服务发现与注册。服务发现与注册的实现解析服务注册服务注册的流程图&#xff1a;etcd的服务注册代码模块在 jupiter/pkg/registry/etcdv3 中。下面让我们来看看实际的代码// Registry register/unregister service// re…

spring jms 事务_Spring JMS:处理事务中的消息

spring jms 事务1.引言 这篇文章将向您展示使用JMS异步接收消息期间使用者执行过程中的错误如何导致消息丢失。 然后&#xff0c;我将解释如何使用本地事务解决此问题。 您还将看到这种解决方案在某些情况下可能导致消息重复&#xff08;例如&#xff0c;当它将消息保存到数据…