在我当前的项目中,我需要处理一组包含一些财务信息的XML文件,然后对该数据执行一些复杂的查询以填充数据库模式。
那些XML文件是基于XSD的,我使用Hyperjaxb3 maven插件从中生成JPA类,一切似乎都运行正常。遗憾的是,我发现并发现即使在Hyperjaxb文档,Google和此处搜索了大量时间后,我也无法找到解决方案。
这是XML文件的一个片段:
<metrics>
<metric name="pi1" type="decimal" periodType="instant" creationDate="">
<label xml:lang="es">Número de personal remunerado</label>
<label xml:lang="en">Number of staff recipient</label>
</metric>
<metric name="md2" type="monetary" periodType="duration" creationDate="">
<label xml:lang="es">Importe devengado en el período actual (flujo)</label>
<label xml:lang="en">Amount awarded in the current period (flow)</label>
</metric>
</metrics>
该问题与标签元素有关。其XSD定义如下:
<xs:element name="label">
<xs:complexType mixed="true">
<xs:attribute ref="xml:lang" use="required"/>
</xs:complexType>
</xs:element>
生成的java类如下所示:
@XmlRootElement(name = "label")
@Entity(name = "Label")
@Table(name = "LABEL")
@Inheritance(strategy = InheritanceType.JOINED)
public class Label implements Serializable, Equals, HashCode {
@XmlValue
protected String content;
...
@Basic
@Column(name = "CONTENT")
public String getContent() {
return content;
}
@Basic
@Column(name = "LANG")
public String getLang() {
return lang;
}
}
我的问题是,如何定义内容的长度&#34;内容&#34;柱?目前,我一直在玩我的绑定文件
<jaxb:bindings node="//xs:element[@name='label']">
<hj:basic>
<orm:column length="1024"/>
</hj:basic>
</jaxb:bindings>
但完全没有任何区别。哦,顺便说一下,如果可能的话,应该避免对XSD文件进行更改,因为它是由第三方提供的。
答案 0 :(得分:1)
好的,正如所承诺的,这就是答案。
免责声明:我是作者。
考虑您提出的示例XSD:
<xs:element name="ten">
<xs:complexType mixed="true">
<xs:attribute name="label" type="xs:string"/>
</xs:complexType>
</xs:element>
自定义内容属性的
<jaxb:bindings node="xs:element[@name='ten']/xs:complexType">
<hj:basic name="content">
<orm:column length="1024"/>
</hj:basic>
</jaxb:bindings>
但问题似乎是XJC将此自定义BOTH应用于类和属性。该定制未在课堂上得到承认。由于XJC对此非常严格,因此0.6.0
会失败。
0.6.1
中的{p> I've added a fix for this,但尚未发布,所以您现在必须自行检查并构建,直到0.6.1发布(还没有计划)。
PS。您可能会发现有关拉取请求的this tutorial有用。您在回购中做了更改,但实际上没有发送我 PR。