Настройте элемент для абстрактного complexType с HyperJaxb3 - PullRequest
0 голосов
/ 08 марта 2019

Я преобразую схему XSD в аннотированный компонент Java для Hibernate с HyperJaxb3.

Пока мне удалось сгенерировать объекты Java, но мне нужно настроить поле примечания для OperableType, поскольку длина по умолчанию составляет 255, а мне нужно увеличить ее до 4000.

Вот фрагмент соответствующей схемы xsd:

<xs:complexType name="OperableType" abstract="true">
    <xs:annotation>
        <xs:documentation xml:lang="en">OperableType contains all the elements and attributes common to all the operables. This is an abstract type, so no element of this type will be present in the XML.
        The logical ID is a unique logical identifier of a sanctioned entity, of a regulation or of a detail of a sanction entity. This information is also provided to external actors for help, especially when entity multiple aliases make it difficult the identification task. For entities imported from previous database, the old value is retained.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
        <xs:element name="remark" type="fsdexport:UnlimitedTextType" minOccurs="0" maxOccurs="unbounded"/>
        <xs:element name="additionalInformation" type="fsdexport:AdditionalInfoType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="logicalId" type="xs:long" use="required"/>
</xs:complexType>
<xs:simpleType name="UnlimitedTextType">
    <xs:restriction base="xs:string"/>
</xs:simpleType>

Я не могу изменить ни схему XSD, ни полученный XML-файл, поэтому мне нужно настроить привязки, чтобы он работал.

Я пытался использовать эту привязку

    <jxb:bindings node="xs:complexType[@name='OperableType']">
        <jxb:bindings node="xs:sequence//xs:element[@name='remark']">
            <hj:basic>
                <orm:column length="4000" />
            </hj:basic>
        </jxb:bindings>
    </jxb:bindings>

но это не изменяет длину в сгенерированном коде.

@ElementCollection
@OrderColumn(name = "HJINDEX")
@Column(name = "HJVALUE", length = 255)
@CollectionTable(name = "OPERABLE_TYPE_REMARK", joinColumns = {
    @JoinColumn(name = "HJID")
})
public List<String> getRemark() {

Я также пытался использовать 'hj: default-single-property' для настройки UnlimitedTextType, но мне также не удалось заставить его работать.

1 Ответ

0 голосов
/ 11 марта 2019

Попросив помощи у источника, https://github.com/highsource/hyperjaxb3/issues/54, У меня есть ответ:

<jxb:bindings node="xs:complexType[@name='OperableType']">
    <jxb:bindings node="xs:sequence//xs:element[@name='remark']">
        <hj:element-collection>
            <orm:column length="4000" />
        </hj:element-collection>
    </jxb:bindings>
</jxb:bindings>

Ключ - использовать hj: element-collection вместо hj: basic для последовательности xml.

...