XJC在package-info.java中生成错误的命名空间

时间:2014-09-17 09:16:55

标签: java xml maven xsd xjc

方法是使用jaxb2-maven-plugin通过xsd生成java类。

pom:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>1.5</version>
            <executions>
                <execution>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <packageName>${project.groupId}.model</packageName>
                <extension>true</extension>
                <arguments>-b ${resource.dir}/jaxbbindings.xsd -Xannotate</arguments>
                <outputDirectory>${basedir}/src/main/java</outputDirectory>
                <schemaFiles>1.0.xsd</schemaFiles>
                <clearOutputDir>true</clearOutputDir>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-basics-annotate</artifactId>
                    <version>0.6.4</version>
                </dependency>
                <dependency>
                    <groupId>com.sun.codemodel</groupId>
                    <artifactId>codemodel</artifactId>
                    <version>2.6</version>
                </dependency>
                <dependency>
                    <groupId>javax.persistence</groupId>
                    <artifactId>persistence-api</artifactId>
                    <version>1.0.2</version>
                </dependency>
            </dependencies>
        </plugin>

xsd 1.0:

<xs:schema
 targetNamespace="http://example.com/1.0"
 xmlns:gs="http://example.com/1.0"
 xmlns:cmn="http://example.com/another"
 xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:import schemaLocation="another.xsd"
   namespace="http://example.com/another" />
   ....
 </xs:schema>

正如您在导入标记中看到的那样,我打算导入另一个模式。

another.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
 elementFormDefault="qualified"
 targetNamespace="http://example.com/another"
 xmlns:vt="http://example.com/another">
  ...
</xs:schema>

因此,如果maven执行XJC以通过XSD生成java类,则还会生成package-info:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://example.com/another")
package de.fraunhofer.fokus.testing.fokusmbt.specexplorer.model;

如上所示,名称空间为http://example.com/another。但这是错误的。命名空间应为http://example.com/1.0

另外一些工作正常(生成java类等)。

我错了什么?

1 个答案:

答案 0 :(得分:1)

您生成2组课程 1# http://example.com/another 2# http://example.com/1.0。对于每组类,将生成package-info.java,但您覆盖"${project.groupId}.model"中的生成文件夹,因此您只有一个package-info.java,只定义一个名称空间。

您应该删除<packageName>${project.groupId}.model</packageName>,一切正常。