【Java 虚拟机笔记】xjc 工具相关整理

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

1. 概述

  • 该工具可以将 XML 模式文件(schema)编译为 Java 实体类。

    • xjc 工具在平台的 bin 目录中使用适当的 shell 脚本启动绑定编译器。
    • 再通过一个 ant 任务运行绑定编译器。
  • 语法: xjc [ options ] schema file/URL/dir/jar ... [-b bindinfo ] ...

模式文件

  • schema file/URL/dir/jar ... 定义了 XML 模式文件的位置。
    • 如果通过 dir 指定,则将编译其中的所有架构文件。
    • 如果通过 jar 指定,则编译 /META-INF/sun-jaxb.episode 中绑定的文件。

绑定文件位置

  • -b bindinfo

1.1 选项(options)

-nv

  • 默认情况下,xjc 绑定编译器在处理源模式之前会对源模式执行严格的验证。
  • 使用此选项可以禁用严格的模式验证。
  • 但并不意味着绑定编译器不执行任何验证,而是将执行不太严格的验证。

-extension

  • 默认情况下,xjc 绑定编译器严格执行 JAXB 规范的 " 兼容性 " 规则。
  • 通过使用 -extension 开关,将允许使用 JAXB 供应商扩展。

-b file

  • 指定一个或多个要处理的外部绑定文件。每个绑定文件必须具有自己的 -b 开关。
  • 外部绑定文件的语法很灵活,可以有一个包含用于多个模式的定制的绑定文件,也可以将定制分为多个绑定文件,例如。
    • xjc schema1.xsd schema2.xsd schema3.xsd -b bindings123.xjb
    • xjc schema1.xsd schema2.xsd schema3.xsd -b bindings1.xjb -b bindings2.xjb -b bindings3.xjb。
    • 在命令行上模式文件和绑定文件的顺序无关紧要。

-d dir

  • 默认情况下,xjc 绑定编译器在当前目录中生成 Java 内容类。
  • 使用此选项可以指定备用输出目录。
  • 输出目录必须已经存在。xjc 绑定编译器不会创建它。

-p pkg

  • 使用此命令行选项指定目标程序包时,它将覆盖程序包名称和规范中定义的默认程序包名称算法的所有绑定自定义设置。

-httpproxy proxy

  • [user [:password] @] proxyHost [:proxyPort] 格式指定 HTTP 或 HTTPS 代理。
  • RI 仍然支持 old -host 和 -portoptions 以获得向后兼容性,但已弃用。使用此选项指定的密码是使用 top 命令的其他用户可见的参数。为了提高安全性,可使用 -httpproxyfile 选项。

-httpproxyfile file

  • 指定带有文件的 HTTP 或 HTTPS 代理。
  • 与 -httpproxy 选项相同的格式,但是文件中指定的密码对其他用户不可见。

-classpath arg

  • 指定 jxb:javaType 和 xjc:superClass 定制使用的客户端应用程序类文件位置。

-catalog file

  • 指定目录文件以解析外部实体引用。支持 TR9401,XCatalog 和 OASIS XML 目录格式。

-readOnly

  • 默认情况下,xjc 绑定编译器不会对其生成的 Java 源文件进行写保护。
  • 使用此选项可以强制 xjc 绑定编译器将生成的 Java 源标记为只读。

-npa

  • 禁止将软件包级别的注释生成到 **/package-info.java 中。
  • 使用此开关会使生成的代码将这些注释内部化为其他生成的类。

-no-header

  • 禁止包含一些注释和时间戳的文件头注释的生成。
  • 使用此选项可使生成的代码与 diff 命令更兼容。

-target 2.0

  • 避免生成依赖于任何 JAXB 2.1 功能的代码。
  • 这将允许生成的代码在 JAXB 2.0 运行时环境(例如 Java SE 6)中运行。

-xmlschema

  • 将输入模式视为 W3C XML 模式(默认)。
  • 如果未指定此开关,则将输入模式视为 W3C XML 模式。

-relaxing

  • 将输入模式视为 RELAX NG(实验性和不受支持)。
  • JAXB 供应商扩展提供了对 RELAX NG 模式的支持。

-relaxing-compact

  • 将输入模式视为 RELAX NG 紧凑语法(实验性的和不受支持的)。
  • JAXB 供应商扩展提供了对 RELAX NG 模式的支持。

-dtd

  • 将输入模式视为 XML DTD(实验性和不受支持的)。
  • JAXB 供应商扩展提供了对 XML DTD 模式的支持。

-wsdl

  • 将输入视为 WSDL,并在其中编译模式(实验性的和不受支持的)。

-quiet

  • 禁止编译器输出,例如进度信息和警告。

-verbose

  • 特别冗长,例如打印参考消息或在出现某些错误时显示堆栈跟踪。

-help

  • 显示编译器开关的简要摘要。

-version

  • 显示编译器版本信息。

schema file/URL/dir

  • 指定一个或多个要编译的模式文件。
  • 如果指定 dir,那么该 xjc 命令将在目录中扫描所有模式文件并对其进行编译。

1.1.1 非标准选项

-XLocator

  • 使生成的代码在 Java bean 实例中公开有关源 XML 的 SAX Locator 信息。

-Xsync-methods

  • 使所有生成的方法签名都包含 synchronized 关键字。

-mark-generated

  • 用注解标记生成的代码 @javax.annotation.Generated

-episode file

  • 生成指定的情节文件以进行单独编译。

1.2 编译器限制

  • 使用相同的绑定编译器开关将所有相关的模式作为一个单元编译是最安全的。

  • 运行 xjc 命令时,有以下限制列表。

    • 其中大多数问题仅在通过多次调用 xjc 命令编译多个架构时才适用。
  • 要同时编译多个模式,有以下针对目标 Java 包名称的优先级规则。

    1. -p 选项具有最高优先级。
    2. jaxb:package 定制。
    3. 如果 targetNamespace 声明了,则将应用于 targetNamespace 规范中定义的 Java 包名称算法。
    4. 如果 targetNamespace 声明为 no ,则使用名为的硬编码包 generated
  • 每个名称空间最多只能有一个 jaxb:schemaBindings,因此不可能在同一目标名称空间中将两个模式编译成不同的 Java 包。

  • 必须将所有被编译到同一 Java 包中的模式同时提交给 xjc 绑定编译器,它们不能独立编译并按预期工作。

  • 跨多个模式文件分布的元素替换组必须同时进行编译。

你可能感兴趣的:(【Java 虚拟机笔记】xjc 工具相关整理)