编译器无法遵守此factoryMethod定制

时间:2017-01-17 21:50:33

标签: jaxb jaxb2 xjc

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

1 个答案:

答案 0 :(得分:0)

似乎jxb:factoryMethod只能用于xjc抱怨的元素。在我的例子中,我不得不通过在与StepAction相同的级别添加其他元素来导致“编译器无法遵守此工厂方法定制”:

<?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不会抛出“编译器无法遵守此工厂方法定制”。

我的结论:

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