Java 已经定义了JAXB类型

Java 已经定义了JAXB类型,java,xsd,jaxb,Java,Xsd,Jaxb,我想从我的Java项目中调用ISAN Restful API,所以我尝试使用maven-jaxb2-plugin从xsd文件生成Java bean。 以下是XSD: 我下载了这些文件并将它们复制到我的src/main/resources文件夹中。 以下是我在pom.xml中的插件配置: <plugins> <plugin> <groupId>org.jvnet.jaxb2.maven

我想从我的Java项目中调用ISAN Restful API,所以我尝试使用maven-jaxb2-plugin从xsd文件生成Java bean。 以下是XSD:

我下载了这些文件并将它们复制到我的src/main/resources文件夹中。 以下是我在pom.xml中的插件配置:

        <plugins>
        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <version>0.12.3</version>
            <configuration>
                <schemaDirectory>src/main/resources</schemaDirectory>
            </configuration>

            <executions>
                <execution>
                    <id>isan</id>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                    <configuration>
                        <generatePackage>org.isan</generatePackage>
                        <generateDirectory>${project.build.directory}/generated-sources/isan</generateDirectory>
                    </configuration>
                </execution>
            </executions>
        </plugin>
并修改了插件配置:

                <configuration>
                    <strict>false</strict>
                    <catalog>src/main/resources/catalog.cat</catalog>
                    <generatePackage>org.isan</generatePackage>
                    <generateDirectory>${project.build.directory}/generated-sources/isan</generateDirectory>
                </configuration>

假的
src/main/resources/catalog.cat
org.isan
${project.build.directory}/generated sources/isan

我仍然收到与您遇到的错误相同的错误:

问题在于,当XJC使用目录文件时,它最终会将解析的URL与名称空间相关联,而不是原始名称空间。这导致了一个奇怪的错误,即同一类型被多次定义

解决方案是使用目录(与您一样),但编译绝对URL而不是本地文件。在这种情况下,所有模式都将具有原始URL

所以这就是你如何做到的:

创建架构文件的本地副本。我发现在服务器上复制目录结构更好。所以你会有这样的想法:

isan
  schema
    v1.11
      common
        common.xsd
        version.xsd
        title.xsd
        externalid.xsd
        participant.xsd
        language.xsd
        country.xsd
    v1.21
      common
        serial.xsd
  ISAN
    isan.xsd
写入目录文件以重写绝对URL:

REWRITE_SYSTEM "http://www.isan.org" "isan"
使用此目录并从绝对URL编译架构,如:

<strict>false</strict>
<catalog>src/main/resources/catalog.cat</catalog>
<schemas>
    <schema>
        <url>http://www.isan.org/schema/v1.11/common/common.xsd</url>
    </schema>
    <schema>
        <url>http://www.isan.org/schema/v1.21/common/serial.xsd</url>
    </schema>
    <!-- ... -->
</schemas>
下面是其中一个模块的
pom.xml
片段:

<schemas>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/wsdl20.xsd</url>
    </schema>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/http.xsd</url>
    </schema>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/rpc.xsd</url>
    </schema>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/soap.xsd</url>
    </schema>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/wsdl20-extensions.xsd</url>
    </schema>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/wsdl20-instance.xsd</url>
    </schema>
</schemas>

http://www.w3.org/2007/06/wsdl/wsdl20.xsd
http://www.w3.org/2007/06/wsdl/http.xsd
http://www.w3.org/2007/06/wsdl/rpc.xsd
http://www.w3.org/2007/06/wsdl/soap.xsd
http://www.w3.org/2007/06/wsdl/wsdl20-extensions.xsd
http://www.w3.org/2007/06/wsdl/wsdl20-instance.xsd

谢谢,这个答案真的很有帮助,但我面临另一个问题。我编辑了我的帖子。@julaudo新问题-新问题。对不起。我提出了一个新问题:
REWRITE_SYSTEM "http://www.w3.org" "maven:org.hisrc.w3c:w3c-schemas:jar::!/w3c"
<schemas>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/wsdl20.xsd</url>
    </schema>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/http.xsd</url>
    </schema>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/rpc.xsd</url>
    </schema>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/soap.xsd</url>
    </schema>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/wsdl20-extensions.xsd</url>
    </schema>
    <schema>
        <url>http://www.w3.org/2007/06/wsdl/wsdl20-instance.xsd</url>
    </schema>
</schemas>