使用include的JAXB剧集编译不起作用

时间:2014-09-08 16:25:41

标签: java xml xjc maven-jaxb2-plugin jaxb-episode

我有两个模式A,B。我重复使用B中的一些A元素。

我不使用名称空间。

我正在使用

<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.9.0</version>

我已经在架构B中定义了架构A的包含:

<xs:include schemaLocation="classpath:my.schema.A.xsd"/>

和目录

REWRITE_SYSTEM "classpath:my.schema.A.xsd" "maven:my.schema:schema-a!/A.xsd"

jaxb配置:

<configuration>
    <generatePackage>my.schema.b</generatePackage>
    <schemaIncludes>
        <includes>B.xsd</includes>
    </schemaIncludes>
    <episodes>
        <episode>
            <groupId>my.schema</groupId>
            <artifactId>schema-a</artifactId>
        </episode>
    </episodes>
    <catalog>src/main/catalog/catalog.cat</catalog>
</configuration>

问题在于,无论何时指定episode依赖项,架构都不会生成任何类,即使它包含一些我想为其生成类的B元素。

[INFO] Parsing input schema(s)...
[INFO] Compiling input schema(s)...
[INFO] Cleaning package directories.
[INFO] Finished execution.

当我删除这一集时,它运作良好,并为模式A生成类 - 我确实想避免这些。

你有什么建议吗?

样本发布在Jaxb episodic compilation

2 个答案:

答案 0 :(得分:5)

好的,我已经检查了你的例子。问题是你没有使用命名空间。

检查您的META-INF/sub-jaxb.episode文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb">
  <jaxb:bindings scd="x-schema::">
    <jaxb:schemaBindings map="false">
      <jaxb:package name="schema.episode.a"/>
    </jaxb:schemaBindings>
    <jaxb:bindings scd="person">
      <jaxb:class ref="schema.episode.a.Person"/>
    </jaxb:bindings>
  </jaxb:bindings>
</jaxb:bindings>

您会看到<jaxb:bindings scd="x-schema::">,然后是<jaxb:schemaBindings map="false">。这基本上告诉XJC&#34;不要在空命名空间中映射任何东西&#34;。由于您的第二个架构(b.xsd)也不使用命名空间,因此当您使用a.xsd的剧集文件(上面的绑定)时,您也会禁止为b.xsd生成代码

总而言之,在使用剧集/单独的架构编译时,您无法将具有一个命名空间的架构放入不同的剧集中。这正是include的问题。

这不是maven-jaxb2-plugin中的错误。我不会把它称为XJC中的错误。它是默认情况下剧集的工作方式。

请参阅我的拉取请求here,它会演示事件编译,相应地处理命名空间。

答案 1 :(得分:0)

此处maven-jaxb2-plugin的作者。

我的猜测是你的剧集说的是“不要编译命名空间A和B&#34;”。请检查JAR中META-INF内的绑定文件。

这是非常先进的用法,这可能会出现很多问题。你使用:

  • 目录
  • 基于Maven工件的架构解析

目录和剧集是XJC功能,Maven解析来自maven-jaxb2-plugin。 我们应该尝试找出失败的原因:

  • 只使用剧集试一试 - 提取你的模式并按原样编译#34;没有目录和解析器
  • 只是目录 - 提取架构并重写为本地目录而不是maven:
  • 尝试maven:my.schema:schema-a!/A.xsd作为没有剧集和目录的架构位置

显然还有另外三种组合尝试。

如果您提供示例项目,我会调查(但不会在接下来的10天内)。最好的办法是提出问题。我将把插件移动到GitHub,所以这将是一个好地方:

https://github.com/highsource/maven-jaxb2-plugin