Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Maven 如何定制JAXB2生成的package-info.java_Maven_Jaxb2 - Fatal编程技术网

Maven 如何定制JAXB2生成的package-info.java

Maven 如何定制JAXB2生成的package-info.java,maven,jaxb2,Maven,Jaxb2,我正在使用 <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> org.jvnet.jaxb2.maven2 maven-jaxb2-plugin 从XSD文件生成Java类 我补充说 <args>-npa</args> -npa 因此,插件不再生成package-info.java,但是使用此选项

我正在使用

<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
从XSD文件生成Java类

我补充说

<args>-npa</args>
-npa
因此,插件不再生成package-info.java,但是使用此选项生成的java类是不同的(命名空间被添加到每个元素)

因此,我无法使用package-info.java自定义名称空间

如何在不修改手动生成的文件的情况下使用自定义名称空间?

您可以使用jaxb2公共项目中的名称空间前缀插件(免责声明:我编写了该插件):

这是一个xjc插件,允许在bindings.xml文件中定义名称空间->前缀映射:

您的pom.xml如下所示:

<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.8.0</version>
    <configuration>
        <schemaDirectory>src/main/resources</schemaDirectory>
        <catalog>src/main/resources/catalog.xml</catalog>
        <schemaIncludes>
            <include>*.xsd</include>
        </schemaIncludes>
        <bindingDirectory>src/main/resources</bindingDirectory>
        <bindingIncludes>
            <include>bindings.xml</include>
        </bindingIncludes>
        <args>
            <arg>-extension</arg>
            <arg>-Xnamespace-prefix</arg>
        </args>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb2-namespace-prefix</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</plugin>

org.jvnet.jaxb2.maven2
maven-jaxb2-plugin
0.8.0
src/main/resources
src/main/resources/catalog.xml
*.xsd
src/main/resources
bindings.xml
-延伸
-XX名称空间前缀
生成
org.jvnet.jaxb2_commons
jaxb2名称空间前缀
1.0-快照

您可以通过引导JAX-B生成
包info.java
并在XSD中设置所需的目标名称空间来定制名称空间

<xs:schema version="1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd"
    targetNamespace="yourTargetNameSpace"
    xmlns="yourTargetNameSpace"
    elementFormDefault="qualified">


如果我想覆盖
@javax.xml.bind.annotation.XmlSchema(名称空间=”http://www.ech.ch/xmlns/eCH-0007/3“
@javax.xml.bind.annotation.XmlSchema(namespace=“”
?如何做到这一点?@icedek,如果您更改xml名称空间,您就是在更改XSD的定义:即使xml结构保持不变,它们也不会兼容。如果您需要这样做,为什么不修改XSD本身?有人知道是否可以用jaxws maven插件实现同样的效果吗?@kovica对于jaxws maven插件,使用
-B-Xnamespace-prefix
@Dojo在一个目录中拥有多个共享相同名称空间前缀的XSD,我想您必须为每个XSD重复绑定定义,每次都指定相同的前缀。但是我没有尝试过。对于使用目录作为schemaLocation的参数,我也没有尝试(一种通配符标准),它与jxb绑定的工作方式更相关,我真的不知道。如果您可以访问xsd,这是最简单的答案。
<plugin>
    <groupId>org.jvnet.jaxb2.maven2</groupId>
    <artifactId>maven-jaxb2-plugin</artifactId>
    <version>0.8.0</version>
    <configuration>
        <schemaDirectory>src/main/resources</schemaDirectory>
        <catalog>src/main/resources/catalog.xml</catalog>
        <schemaIncludes>
            <include>*.xsd</include>
        </schemaIncludes>
        <bindingDirectory>src/main/resources</bindingDirectory>
        <bindingIncludes>
            <include>bindings.xml</include>
        </bindingIncludes>
        <args>
            <arg>-extension</arg>
            <arg>-Xnamespace-prefix</arg>
        </args>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>org.jvnet.jaxb2_commons</groupId>
            <artifactId>jaxb2-namespace-prefix</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</plugin>
<xs:schema version="1.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xsi:schemaLocation="http://www.w3.org/2001/XMLSchema http://www.w3.org/2001/XMLSchema.xsd"
    targetNamespace="yourTargetNameSpace"
    xmlns="yourTargetNameSpace"
    elementFormDefault="qualified">