Maven-Jaxb2 插件类型引用抛出已经定义的错误
Maven-Jaxb2 Plugin Type references Are throwing Already Defined Errors
我是 Jaxb 插件生成模型的新手。我有 2 个 xsd 文件,其中一个 xsd 引用其他 xsd
中的类型
common.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://www.example.com/schemas/common"
version="1.0" xmlns="http://www.example.com/schemas/common"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="person">
<xsd:sequence>
<xsd:element minOccurs="1" name="gender" type="xsd:string"/>
<xsd:element minOccurs="1" name="dateOfBirth" type="xsd:string"/>
<xsd:element minOccurs="1" name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
pupil.xsd ,这参考了 common.xsd
中定义的人
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://www.example.com/schemas/pupil" version="1.0"
xmlns:common="http://www.example.com/schemas/common"
xmlns="http://www.example.com/schemas/pupil" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.example.com/schemas/common" schemaLocation="http://www.example.com/domain/schemas/common/common.xsd"/>
<xsd:complexType name="student">
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="class" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="1" name="generralInfo" type="common:person"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
catalog.cat ,尝试使用插件的剧集功能
REWRITE_SYSTEM
"http://www.example.com/domain/schemas/common/common.xsd" "."
pom.xml,这是我的 maven 构建配置
<build>
<defaultGoal>test</defaultGoal>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<configuration>
<extension>true</extension>
<catalog>src/main/resources/catalog.cat</catalog>
</configuration>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
而我 运行 mvn clean install
,我正在关注
错误
[ERROR] Error while parsing schema(s).Location [
http://www.example.com/domain/schemas/common/common.xsd{XXX,XX}].
org.xml.sax.SAXParseException; systemId:
http://www.example.com/domain/schemas/common/common.xsd; lineNumber:
XXX; columnNumber: XXX; 'person' is already defined
我尝试使用提到的各种选项 here 来解决此错误,但它对我有帮助。我认为我在绑定配置或 pom 配置中做错了什么
谁能指出这里有什么问题
我找到了解决问题的方法,我做错了很多事情
1) 改变
<xsd:include> to <xsd:import>
2) common.xsd
和 pupil.xsd
的名称 space 保持相同
3) 在我遵循这些更改之后,
中的步骤
这是来自插件本身作者的示例 project,它解决了我面临的相同问题
我是 Jaxb 插件生成模型的新手。我有 2 个 xsd 文件,其中一个 xsd 引用其他 xsd
中的类型common.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://www.example.com/schemas/common"
version="1.0" xmlns="http://www.example.com/schemas/common"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:complexType name="person">
<xsd:sequence>
<xsd:element minOccurs="1" name="gender" type="xsd:string"/>
<xsd:element minOccurs="1" name="dateOfBirth" type="xsd:string"/>
<xsd:element minOccurs="1" name="name" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
pupil.xsd ,这参考了 common.xsd
中定义的人<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema attributeFormDefault="unqualified"
elementFormDefault="qualified"
targetNamespace="http://www.example.com/schemas/pupil" version="1.0"
xmlns:common="http://www.example.com/schemas/common"
xmlns="http://www.example.com/schemas/pupil" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="http://www.example.com/schemas/common" schemaLocation="http://www.example.com/domain/schemas/common/common.xsd"/>
<xsd:complexType name="student">
<xsd:sequence>
<xsd:element maxOccurs="1" minOccurs="1" name="class" type="xsd:string"/>
<xsd:element maxOccurs="1" minOccurs="1" name="generralInfo" type="common:person"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
catalog.cat ,尝试使用插件的剧集功能
REWRITE_SYSTEM "http://www.example.com/domain/schemas/common/common.xsd" "."
pom.xml,这是我的 maven 构建配置
<build>
<defaultGoal>test</defaultGoal>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<configuration>
<extension>true</extension>
<catalog>src/main/resources/catalog.cat</catalog>
</configuration>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
而我 运行 mvn clean install
,我正在关注
错误
[ERROR] Error while parsing schema(s).Location [ http://www.example.com/domain/schemas/common/common.xsd{XXX,XX}]. org.xml.sax.SAXParseException; systemId: http://www.example.com/domain/schemas/common/common.xsd; lineNumber: XXX; columnNumber: XXX; 'person' is already defined
我尝试使用提到的各种选项 here 来解决此错误,但它对我有帮助。我认为我在绑定配置或 pom 配置中做错了什么
谁能指出这里有什么问题
我找到了解决问题的方法,我做错了很多事情
1) 改变
<xsd:include> to <xsd:import>
2) common.xsd
和 pupil.xsd
3) 在我遵循这些更改之后,
这是来自插件本身作者的示例 project,它解决了我面临的相同问题