【发布时间】:2022-01-17 14:17:21
【问题描述】:
我有几十个 .xsd 文件要为其自动生成代码。当我尝试同时生成所有文件时,其中一些文件的名称会发生冲突。
我只专注于尝试让其中 2 个发挥作用。
当我得到这 2 个工作时,我会解决其余的问题。但我现在只关注其中两个文件。我无法控制它们,它们来自供应商并遵循“标准”,因此出于多种原因编辑它们不是一种选择。
我正在使用maven-jaxb2-plugin 来处理这些文件。
我添加了一个binding.xjb 文件,正如mat b 的答案和我在网上找到的其他说明中的链接中所建议的那样。但是我收到以下错误,没有输出。
<?xml version="1.0" encoding="UTF-8"?>
<jxb:bindings version="2.1"
xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xsi:schemaLocation=" http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd">
<jxb:bindings schemaLocation="mac-3.4.xsd">
<jxb:schemaBindings>
<jxb:package name="my.company.mac"/>
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="mac-stylesheet-3.4.xsd">
<jxb:schemaBindings>
<jxb:package name="my.company.stylesheet"/>
</jxb:schemaBindings>
</jxb:bindings>
</jxb:bindings>
出现以下错误
[ERROR] Error while parsing schema(s).Location [ file:/C:/Users/Jarrod%20Roberson/Projects/spa-tools/spa-lib/src/main/sc
hema/mac-stylesheet-3.4.xsd{165,33}].
org.xml.sax.SAXParseException: 'halign' is already defined
有问题的元素是:(还有很多其他的,这只是第一个冲突的)
<xsd:simpleType name="halign">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="left" />
<xsd:enumeration value="center" />
<xsd:enumeration value="right" />
</xsd:restriction>
</xsd:simpleType>
并且在每个.xsd 文件中都是相同的,我该如何解决这种重复,要么只生成一个类,要么将每个类都生成到它们自己的包命名空间中?
这不是唯一一个像这样的重复元素,它们有很多,所以仅仅尝试从文件中删除它们也不是一种选择。
这个halign 位于多个.xsd 文件中,我想将它们放在各自的包中,或者能够告诉编译器使用生成的第一个包。
这是我在尝试外部.xjb 文件之前开始的地方,只需在pom.xml 中指定package。
如何配置绑定以忽略重复配置、将它们映射到单独的包或将它们映射到现有实现?
【问题讨论】:
标签: java maven jaxb maven-plugin maven-jaxb2-plugin