繁体   English   中英

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

[英]Adding annotations to JAXB-generated classes which depend on information in XSD

我有一个需要转换为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的一些东西吗? 或者我只是在这里要求太多?

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

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

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

请参阅我的答案在Java JAXB注释类生成的模式中生成XSD限制以获取详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM