【问题标题】:Defining package names for common XSD's with xjc and bindings使用 xjc 和绑定定义常见 XSD 的包名称
【发布时间】:2012-05-31 06:22:14
【问题描述】:

我正在尝试使用 xjc 从几个特定 XSD 生成 Java 类。这些模式有一些共同的定义,因此它们导入了许多常见的 XSD。特别是,它们可以包括从零到所有常见的 XSD。

我想生成从特定 XSD 到特定包的所有类,但将通用模式的生成类保存在一个通用包中,这样它们就不会在源树中的每个特定模式中重复。

我了解到自定义绑定可用于基于每个模式指定包,例如:

<jxb:bindings schemaLocation="common1.xsd" node="/xsd:schema">
    <jxb:schemaBindings>
        <jxb:package name="mypackage.commonclasses"/>
    </jxb:schemaBindings>
</jxb:bindings>

我有以下结构:

schemas
| - common
| | - common1.xsd --> XSD with common types #1
| | - ...
| | - commonN.xsd --> XSD with common types #N
| | - commonBindings.xjb --> Defines package "mypackage.commons" for common*.xsd
| - specific1
| | - specific1.xsd --> Includes ../common/common{1-N}.xsd
| | - specific1.xjb --> Defines package "mypackage.specific1" for specific1.xsd
| - specificN
| | - specificN.xsd --> Includes only ../common/common1.xsd
| | - specificN.xjb --> Defines package "mypackage.specificN" for specificN.xsd

一切正常:

xjc -b schemas/specific1
    -b schemas/common 
    schemas/specific1/specific1.xsd

它在mypackage.specific1 中为specific1.xsd 生成类,在mypackage.commons 中生成公共类。但是当我尝试为specificN 生成类时,xjc 会抛出以下错误:

[ERROR] "file:/drive/dir/schemas/common/common1.xsd" is not a part of
 this compilation. Is this a mistake for "/drive/dir/schemas/common/commonBindings.xjb"?
  line 2 of file:/drive/dir/schemas/common/commonBindings.xjb

对于未在任何特定 xsd 中导入的每个常见 XSD,我都会重复此错误。

有什么方法可以让xjc 忽略commonBindings.xjb 中我为其生成类的XSD 中未使用的绑定?

或者,我是否使用这种方法瞄准了错误的方向,例如,应该在特定 xsd 中使用注释?如果可能,我想避免修改架构。

【问题讨论】:

    标签: java xml xsd jaxb xjc


    【解决方案1】:

    我认为您需要的是使用 JAXB 插曲。见this SO post,看看@BlaiseDoughan 提供的答案。

    在您的情况下,首先运行 xjc,使用您的自定义绑定文件自定义包名称,针对所有常见的 XSD,生成剧集文件和您的常见 Java 类。

    然后通过引用第一次运行的剧集文件,再次使用 xjc 和您想要的其他 XSD。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-10
      • 2013-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多