Конфигурация стратегии именования Hyperjaxb3 - PullRequest
0 голосов
/ 26 июня 2011

Я пытаюсь встроить несколько экземпляров одного и того же сложного типа в один объект, который, кажется, не работает, если я не определю новый комплексный тип для каждого экземпляра.Насколько я могу до сих пор, это, вероятно, из-за стратегии именования hyperjaxb3 по умолчанию.Есть ли способ изменить стратегию именования hyperjaxb3 по умолчанию с помощью аннотаций (например, аналогично настройке стратегии id) вместо добавления кода в сам плагин?Спасибо, Фредерик

1 Ответ

1 голос
/ 26 июня 2011

Было бы намного проще, если бы вы предоставили пример того, что вы пытаетесь сделать: схему, сгенерированные аннотации и то, что вы хотели бы сгенерировать вместо этого.

Вот что у меня есть в одном из тестовых проектов. Схема:

<xs:element name="a" type="aType"/>
<xs:complexType name="aType">
    <xs:sequence>
        <xs:element name="b0" type="bType" minOccurs="0"/>
        <xs:element name="b1" type="bType" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>
<xs:complexType name="bType">
    <xs:annotation>
        <xs:appinfo>
            <hj:embeddable/>
        </xs:appinfo>
    </xs:annotation>
    <xs:sequence>
        <xs:element name="c" minOccurs="0">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="999"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>
        <xs:element name="d" type="xs:int" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>

Формирует:

@Embedded
@AttributeOverrides({
    @AttributeOverride(name = "c", column = @Column(name = "B0_C", length = 999)),
    @AttributeOverride(name = "d", column = @Column(name = "B0_D", precision = 10, scale = 0))
})
public BType getB0() {
    return b0;
}
@Embedded
@AttributeOverrides({
    @AttributeOverride(name = "c", column = @Column(name = "B1_C", length = 999)),
    @AttributeOverride(name = "d", column = @Column(name = "B1_D", precision = 10, scale = 0))
})
public BType getB1() {
    return b1;
}

Я не вижу именных коллизий.

UPDATE

Вот несколько ссылок о настройке именования:

Проверьте это руководство:

http://confluence.highsource.org/display/HJ3/Customization+Guide

Вот тестовый проект, который демонстрирует некоторые из этих функций:

http://java.net/projects/hj3/sources/svn/show/trunk/ejb/tests/cu-one

Вы также можете написать и настроить собственную стратегию именования:

http://java.net/projects/hj3/sources/svn/show/trunk/ejb/tests/custom-naming

...