使用HyperJaxB3自定义元素用于抽象复杂类型



我将XSD模式转换为使用Hyperjaxb3的Hibernate的Java bean。

到目前为止,我设法生成了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,但我也没有设法使其正常工作。

从源询问源后,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>

密钥是使用tu:element-collection而不是hj:xml序列的基础。

最新更新