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情节汇编中
好的,我检查了你的例子.问题是您不使用名称空间.
检查你的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请求,它演示了在相应处理命名空间时的情节编译.