Java “解决JAXB问题”;ObjectFactory类中的名称冲突;定制问题

Java “解决JAXB问题”;ObjectFactory类中的名称冲突;定制问题,java,xml,jaxb,Java,Xml,Jaxb,对执行“xjc”命令返回一个两个声明会导致ObjectFactory类中发生冲突,因为有两个元素名为“Scale”和“Scale” 根据,这个问题可以通过使用定制xsd文件来解决 你知道怎么做吗?您有一个绑定文件的例子可以这样做吗?解决问题的一个方法是使用-p选项为每个xsd文件指定单独的包名。您可以使用bindings标记。将schemaLocation属性设置为特定xsd的位置。子标记、schemaBindings和package,然后为该xsd定义一个新的包名称空间。下面是我刚才在xjc中

对执行“xjc”命令返回一个
两个声明会导致ObjectFactory类中发生冲突,因为有两个元素名为“Scale”和“Scale”

根据,这个问题可以通过使用
定制xsd文件来解决


你知道怎么做吗?您有一个绑定文件的例子可以这样做吗?

解决问题的一个方法是使用-p选项为每个xsd文件指定单独的包名。

您可以使用bindings标记。将schemaLocation属性设置为特定xsd的位置。子标记、schemaBindings和package,然后为该xsd定义一个新的包名称空间。下面是我刚才在xjc中使用的绑定文件。如果它仍然有效,那就太好了。如果不是,示例=)



您是否尝试过-B-XautoNameResolution?它可能并不总是奏效,但最好在编写绑定文件之前试一试。

好吧,经过长时间的尝试,下面的配置对我很有效。我使用的是jaxb2 maven插件2.3.1和一个单独的绑定文件:

pom.xml

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>2.3.1</version>
            <executions>
                <execution>
                    <id>xjc</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <target>2.1</target>
                <sources>
                    <source>src/main/xsd</source>
                </sources>
                <xjbSources>
                    <xjbSource>src/main/xjb/bindings-1.3.xjb</xjbSource>
                </xjbSources>
                <arguments>
                    <argument>-Xfluent-api</argument>
                </arguments>
                <!-- Package name of the generated sources. -->
                <!-- Don't use it, because we've already declared separate package name inside bindings -->
                <!-- <packageName>com.abc.xyz.generated</packageName> -->
                <outputDirectory>${basedir}/target/generated-sources/classes</outputDirectory>
                <clearOutputDir>false</clearOutputDir>
                <extension>true</extension>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-fluent-api</artifactId>
                    <version>3.0</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

org.apache.maven.plugins

.

谢谢你的回答-不幸的是,B-XautoNameResolution不是一个可识别的xjc参数。我使用的是2.1.10版。它在2.1.10中被称为
-XautoNameResolution
,我也遇到了同样的问题。如果你把
-B
放在哪里,它就可以正常工作了?我一直在找,文件里没有任何建议。你知道怎么做吗?谢谢你的回答。我现在已经解决了这个问题。这个页面也很有用:很好的回答:上面的链接目前无法解析。回程机器版本如下:
<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>jaxb2-maven-plugin</artifactId>
            <version>2.3.1</version>
            <executions>
                <execution>
                    <id>xjc</id>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>xjc</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <target>2.1</target>
                <sources>
                    <source>src/main/xsd</source>
                </sources>
                <xjbSources>
                    <xjbSource>src/main/xjb/bindings-1.3.xjb</xjbSource>
                </xjbSources>
                <arguments>
                    <argument>-Xfluent-api</argument>
                </arguments>
                <!-- Package name of the generated sources. -->
                <!-- Don't use it, because we've already declared separate package name inside bindings -->
                <!-- <packageName>com.abc.xyz.generated</packageName> -->
                <outputDirectory>${basedir}/target/generated-sources/classes</outputDirectory>
                <clearOutputDir>false</clearOutputDir>
                <extension>true</extension>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.jvnet.jaxb2_commons</groupId>
                    <artifactId>jaxb2-fluent-api</artifactId>
                    <version>3.0</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<jxb:bindings schemaLocation="../xsd/ccv1p3_imscp_v1p2_v1p0.xsd"
    node="//xs:schema">
    <jxb:globalBindings>
        <jxb:serializable uid="1" />
        <jxb:javaType name="java.util.Calendar" xmlType="xs:dateTime"
            parseMethod="javax.xml.bind.DatatypeConverter.parseDateTime"
            printMethod="javax.xml.bind.DatatypeConverter.printDateTime" />
    </jxb:globalBindings>
    <jxb:schemaBindings>
        <jxb:package name="com.abc.xyz.generated.manifest" />
    </jxb:schemaBindings>
</jxb:bindings>

<jxb:bindings
    schemaLocation="http://www.imsglobal.org/profile/cc/ccv1p3/LOM/ccv1p3_lommanifest_v1p0.xsd"
    node="//xs:schema">
    <jxb:schemaBindings>
        <jxb:package name="com.abc.xyz.generated.lommanifest" />
    </jxb:schemaBindings>
</jxb:bindings>

<jxb:bindings
    schemaLocation="http://www.imsglobal.org/profile/cc/ccv1p3/LOM/ccv1p3_lomresource_v1p0.xsd"
    node="//xs:schema">
    <jxb:schemaBindings>
        <jxb:package name="com.lcs.thincc.generated.lomresource" />
    </jxb:schemaBindings>
</jxb:bindings>