编译器无法接受此 factoryMethod 自定义

Compiler was unable to honor this factoryMethod customization

我需要使用 "factoryMethod" 来解析 "Two declarations cause a collision in the ObjectFactory class."。但是,我收到 "Compiler was unable to honor this factoryMethod customization"。我找不到关于 "factoryMethod" 的信息。看来我没有正确使用它。请查看我的简化架构:

<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1">
    <xs:element name="UseCase">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="StepAction" >
                    <xs:annotation>
                        <xs:appinfo>
                            <jxb:factoryMethod name="createStepAction" />
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

我用"xjc %schemaname%"生成类。

似乎 jxb:factoryMethod 只能用于 xjc 抱怨的元素。在我的示例中,我必须通过在与 StepAction:

相同级别添加其他元素来导致 "Compiler was unable to honor this factoryMethod customization"
<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" jxb:version="2.1">
    <xs:element name="UseCase">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="StepAction" >
                    <xs:annotation>
                        <xs:appinfo>
                            <jxb:factoryMethod name="createStepAction" />
                        </xs:appinfo>
                    </xs:annotation>
                </xs:element>

                <xs:element name="Step-Action"/> <!-- causes Compiler was unable to honor this factoryMethod customization -->

            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

在这种情况下,XJC 不会抛出 "Compiler was unable to honor this factoryMethod customization"。

我的结论:

  • 如果 XJC 不产生 "Two declarations cause a collision in the ObjectFactory class." 错误
  • ,则不能使用 jxb:factoryMethod 更改 ObjectFactory 的 createXXX 方法的名称
  • "Two declarations cause a collision in the ObjectFactory class." 当在同一级别(兄弟)有多个名称冲突的元素时会产生。如果他们处于不同的级别,xjc 不会抱怨。名称冲突是指 XJC 转换后名称相同(例如 "Step-Action" 和 "StepAction" 相同)
  • jxb:class 注解对 ObjectFactory 的 createXXX 方法没有影响