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

Tia*_* Na 6 java xml xjc maven-jaxb2-plugin jaxb-episode

我有2个模式A,B.我在B中重用了一些A元素.

我不使用命名空间.

我正在使用

<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.9.0</version>
Run Code Online (Sandbox Code Playgroud)

我已经在模式B中定义了模式A的包含:

<xs:include schemaLocation="classpath:my.schema.A.xsd"/>
Run Code Online (Sandbox Code Playgroud)

和目录为

REWRITE_SYSTEM "classpath:my.schema.A.xsd" "maven:my.schema:schema-a!/A.xsd"
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

[INFO] Parsing input schema(s)...
[INFO] Compiling input schema(s)...
[INFO] Cleaning package directories.
[INFO] Finished execution.
Run Code Online (Sandbox Code Playgroud)

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

你有什么建议吗?

一个样本发表在Jaxb情节汇编中

lex*_*ore 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>
Run Code Online (Sandbox Code Playgroud)

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

总而言之,当使用剧集/单独的模式编译时,您无法将具有一个名称空间的模式放入不同的剧集中.这正是问题所在include.

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

在这里查看我的pull请求,它演示了在相应处理命名空间时的情节编译.