Java 包含的JAXB片段编译不起作用

Java 包含的JAXB片段编译不起作用,java,xml,xjc,maven-jaxb2-plugin,jaxb-episode,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> jaxb配置如下: <configuration> <generatePackage>my.sc

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

我不使用名称空间。

我正在使用

<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.9.0</version>
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>
当我删除该插曲时,它工作得很好,并为模式A生成了类——这是我确实希望避免的

你有什么建议吗


一个样本发表在
maven-jaxb2-plugin
的作者中

我猜你的插曲会说“不要编译名称空间A和B”。请检查JAR中
META-INF
中的绑定文件

这是一个非常高级的用法,有很多地方可能会出错。您使用:

  • 目录
  • 基于Maven工件的模式解析
  • 插曲
目录和插曲是XJC的特性,Maven解析来自
Maven-jaxb2-plugin
。 我们应该试着找出失败的地方:

  • 只在剧集中尝试——提取模式并按原样编译,而不使用目录和解析器
  • 只是目录-提取模式并重写为本地目录,而不是
    maven:
  • 试试
    maven:my.schema:schema-a/A.xsd
    作为模式位置,不包含剧集和目录
显然还有三种组合需要尝试

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


好的,我已经检查了你的例子。问题是您不使用名称空间

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

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

您看到这个
,然后看到
。这基本上告诉XJC“不要映射空名称空间中的任何内容”。由于您的第二个架构(
b.xsd
)也不使用名称空间,因此当您使用
a.xsd
的插曲文件(上面的绑定)时,您也会禁止为
b.xsd
生成代码

总之,在使用片段/单独模式编译时,不能将具有一个名称空间的模式放入不同的片段中。这正是
include
的问题所在

这不是
maven-jaxb2-plugin
中的错误。在XJC中,我也不会把它称为bug。这只是默认情况下的情节工作方式


请参阅我的pull请求,它演示了在相应地处理名称空间时的片段编译。

我不确定在这一片段中应该寻找什么选项。我非常确定目录正确地从jar解析了模式。我在“谢谢”下发布了一个示例!谢谢你的回答。我在第二句中提到我不使用名称空间。我将尝试使用map=“true”。在插曲文件中设置map=“true”对我有效。完全从插曲文件中删除
对我有效。
<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>
[INFO] Parsing input schema(s)...
[INFO] Compiling input schema(s)...
[INFO] Cleaning package directories.
[INFO] Finished execution.
<?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>