Компилятору не удалось выполнить настройку factoryMethod

Мне нужно использовать » factoryMethod «для разрешения» два объявления вызывают столкновение в ObjectFactory class.». Тем не менее, я получаю «компилятор не смог выполнить эту настройку factoryMethod». Я не смог найти никакой информации о «factoryMethod». Кажется, я неправильно его использую. Пожалуйста, посмотрите мою упрощенную схему:

<?xml version='1.0' encoding='UTF-8' ?>
<xs:schema   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 ответ

  1. Похоже, что JXB: factoryMethod можно использовать только для элементов xjc. В моем примере я должен был вызвать «компилятор не смог выполнить эту настройку factoryMethod», добавив другой элемент на том же уровне, что и StepAction:

    <?xml version='1.0' encoding='UTF-8' ?>
    <xs:schema   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» в этом случае.

    Мой вывод:

    • Нельзя использовать jxb: factoryMethod для изменения имени метода Createxxx ObjectFactory, если XJC не производит «два объявления вызывают столкновение в классе ObjectFactory.» ошибка
    • «Два объявления вызывают столкновение в классе ObjectFactory.»производится, когда существует несколько элементов с конфликтующими именами на одном уровне (братья и сестры). Если они находятся на другом уровне, xjc не будет жаловаться. Под конфликтующими именами я подразумеваю имена, которые одинаковы после транформации XJC (например, «Step-Action» и «StepAction» одинаковы)
    • JXB: аннотации классов не влияют на методы Createxxx ObjectFactory