向依赖于XSD中的信息的JAXB生成的类添加注释
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了向依赖于XSD中的信息的JAXB生成的类添加注释相关的知识,希望对你有一定的参考价值。
我有一个需要转换为Java类的WSDL + XSD。这很简单 - wsimport
将毫无问题地处理这个问题。但是,我还需要能够为生成的类添加注释,并且这些注释需要包含XSD中包含的信息(特别是,它们需要引用xsd:maxLength
或xsd:length
属性)。
为什么?因为我计划之后使用Bindy将它们转换为平面文件。作为参考,我知道我可以使用Annox为生成的类添加自定义注释,但据我所知,这将要求所有注释都相同,所有参数都相同,或者为每个元素指定注释单独地,无法指定注释一次以及指定其中一个参数的值对于每个元素应该是不同的某种方式(例如xpath)。
也就是说,给出了类似的模式提取
<xsd:element name="smapleRequest">
<xsd:sequence>
<xsd:element name="ELEMENT_ONE">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:length value="3" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="ELEMENT_TWO">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="8" />
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:element>
我希望看到这样的类:
.
.
.
@FixedLengthRecord
public class SampleRequest {
@XmlElement(name = "ELEMENT_ONE", required = true)
@DataField(pos = 1, length=3)
protected String elementOne;
@XmlElement(name = "ELEMENT_TWO", required = true)
@DataField(pos = 4, length=8)
protected String elementTwo;
.
.
.
}
理想情况下,我希望能够在不必将XSD中的所有信息复制到JAXB绑定文件中的情况下执行此操作。我的意思是,我可以,但每个网络服务方法可能包含数百个元素,以及许多非常非常非常快速的方法。那时,我可能不得不使用另一个工具从COBOL生成XSD和JAXB绑定文件!
那么,有没有人知道这是否可能?我刚刚错过了Annox的一些东西吗?或者我只是在这里要求太多?
你有几个选择:XJC插件是一条路线,而Annox看起来很有趣。但我不是专家,所以我会让别人和你探讨。
我建议你考虑的另一条路线,如果你遇到第一个,就是通过annotation processing(以前的apt工具,现在是javac工具的一部分)对你生成的JAXB源进行后期处理,以访问XSD并附加你的注释在飞行中。不确定它是否适用于所有情况,但在您给出的示例中,JAXB生成的注释应足以构造XPath表达式以读取相应的XML元素类型特征。假设您的需求基本上在字段长度附近,那应该是很少的用例和XPath表达式。
要自动添加XJsr303Annotations
注释,您可以使用xjc
插件https://github.com/krasa/krasa-jaxb-tools
有关详细信息,请参阅我的答案qazxsw poi。
以上是关于向依赖于XSD中的信息的JAXB生成的类添加注释的主要内容,如果未能解决你的问题,请参考以下文章
XSD 到 jaxb 注释类给出了无法解析 xml 元素错误
JAXB xs:maxLength 和 minOccurs="0" 未在 xsd 生成的类中显示