【问题标题】:Compiler was unable to honor this factoryMethod customization编译器无法兑现此工厂方法自定义
【发布时间】:2017-06-02 03:16:02
【问题描述】:

我需要使用“factoryMethod”来解决“两个声明导致 ObjectFactory 类中的冲突。”。但是,我收到“编译器无法实现此 factoryMethod 自定义”。我找不到有关“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%”来生成类。

【问题讨论】:

    标签: jaxb jaxb2 xjc


    【解决方案1】:

    似乎 jxb:factoryMethod 只能用于 xjc 抱怨的元素。在我的示例中,我必须通过添加与 StepAction 相同级别的其他元素来导致“编译器无法实现此 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:element name="Step-Action"/> <!-- causes Compiler was unable to honor this factoryMethod customization -->
    
                </xs:sequence>
            </xs:complexType>
        </xs:element>
    </xs:schema>
    

    在这种情况下,XJC 不会抛出“编译器无法支持此 factoryMethod 自定义”。

    我的结论:

    • 如果 XJC 不产生“两个声明导致 ObjectFactory 类中的冲突”,则不能使用 jxb:factoryMethod 更改 ObjectFactory 的 createXXX 方法的名称。错误
    • “两个声明导致 ObjectFactory 类发生冲突。”当同一级别(兄弟)有多个名称冲突的元素时产生。如果他们处于不同的级别,xjc 不会抱怨。我所说的冲突名称是指 XJC 转换后的名称相同(例如“Step-Action”和“StepAction”相同)
    • jxb:class 注解对 ObjectFactory 的 createXXX 方法没有影响

    【讨论】:

      猜你喜欢
      • 2017-03-20
      • 1970-01-01
      • 2022-01-16
      • 2017-04-26
      • 2017-10-08
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      相关资源
      最近更新 更多