我有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 。