向依赖于XSD中的信息的JAXB生成的类添加注释

时间:2012-05-28 06:50:18

标签: java xml jaxb annox

我有一个需要转换为Java类的WSDL + XSD。这非常简单 - wsimport可以毫无问题地处理。但是,我还需要能够向生成的类添加注释,并且这些注释需要包含XSD中包含的信息(特别是,它们需要引用xsd:maxLengthxsd: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的一些东西吗?或者我只是在这里要求太多了?

2 个答案:

答案 0 :(得分:1)

你有几个选择:XJC插件是一条路线,而Annox看起来很有趣。但我不是专家,所以我会让别人和你探讨。

我建议你考虑的另一条路线,如果你遇到第一个,就是通过annotation processing(以前的apt工具,现在是javac工具的一部分)对生成的JAXB源进行后处理访问XSD并动态添加注释。不确定它是否适用于所有情况,但在您给出的示例中,JAXB生成的注释应足以构造XPath表达式以读取相应的XML元素类型特征。假设您的需求基本上在字段长度附近,那应该是很少的用例和XPath表达式。

答案 1 :(得分:0)

要自动添加XJsr303Annotations注释,可以使用xjc插件https://github.com/krasa/krasa-jaxb-tools

请参阅我的答案Generation of XSD restrictions in a schema generated from Java JAXB annotated classes了解详情。