我有一个需要转换为 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 绑定(bind)文件中。我的意思是,我可以,但是每个 Web 服务方法可能有数百个元素,以及许多方法,这会变得非常、非常旧、非常、非常快。到那时,我可能不得不使用另一种工具从 COBOL 生成 XSD 和 JAXB 绑定(bind)文件!
所以,有人知道这是否可能吗?我刚刚错过了 Annox 中的某些内容吗?或者我只是在这里要求太多?
最佳答案
您的选择很少:XJC 插件是一种途径,而 Annox 看起来很有趣。但我不是专家所以我会让其他人和你一起探索它。
我建议您考虑的另一条路线是,如果您坚持使用第一种路线,则通过 annotation processing 对生成的 JAXB 源进行后处理。 (以前是 apt 工具,现在是 javac 工具的一部分)访问 XSD 并即时附加您的注释。不确定这是否适用于您的所有情况,但在您给出的示例中,JAXB 生成的注释应该足以构造一个 XPath 表达式来读取相应的 XML 元素类型特征。假设您的需求主要围绕字段长度,那应该很少有用例和 XPath 表达式。
关于java - 向依赖于 XSD 信息的 JAXB 生成的类添加注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10780481/