Java 包含的JAXB片段编译不起作用
我有两个模式A,B。我在B中重用一些A元素 我不使用名称空间。 我正在使用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
<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工件的模式解析
- 插曲
Maven-jaxb2-plugin
。
我们应该试着找出失败的地方:
- 只在剧集中尝试——提取模式并按原样编译,而不使用目录和解析器
- 只是目录-提取模式并重写为本地目录,而不是
maven:
- 试试
作为模式位置,不包含剧集和目录maven:my.schema:schema-a/A.xsd
好的,我已经检查了你的例子。问题是您不使用名称空间 检查您的
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>