我有2个架构A,B。我在B中重用了一些A元素。

我不使用 namespace 。

我正在使用

<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>

问题是,每当我指定情节依赖性时,架构就不会生成任何类,即使它包含一些我想为其生成类的B元素也是如此。
[INFO] Parsing input schema(s)...
[INFO] Compiling input schema(s)...
[INFO] Cleaning package directories.
[INFO] Finished execution.

当我删除该情节时,它可以很好地工作并为模式A生成类-我确实想避免这种情况。

你有什么建议吗?

样本发布在Jaxb episodic compilation

最佳答案

好的,我已经检查了您的示例。问题在于您不使用 namespace 。
检查您的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“不要在空 namespace 中映射任何内容”。由于您的第二个模式(b.xsd)也未使用 namespace ,因此当您使用a.xsd的情节文件(上面的绑定(bind))时,也会抑制b.xsd的代码生成。
综上所述,在使用情节/单独的模式编译时,不能将具有一个 namespace 的模式放入不同的情节中。这正是include的问题。
这不是maven-jaxb2-plugin中的错误。我也不会称它为XJC中的错误。这就是情节在默认情况下的工作方式。
参见我的拉取请求here,它演示了情节式编译,相应地处理了 namespace 。

10-07 22:42