如何使JAXB识别@XmlElement(default ='something')注释参数?

时间:2011-01-04 11:23:57

标签: java jaxb jaxb2

使用JAXB 2.1 RI生成具有固定元素值的XML没有运气。 我们使用xjc生成XML绑定代码并对结果进行编组。

它适用于使用<xs:attribute fixed='something'/>和JAXB自定义属性fixedAttributeAsConstantProperty的属性。 对于元素,我们认为没有办法做同样的事情。或者有吗?

作为一种解决方法,我们使用<xs:element default='something'/>转换为@XmlElement(default='something')。现在我的猜测是你可以告诉编组以某种方式解释default参数并生成一个包含相应内容的元素,如<element>something</element>

我查看了标准和RI供应商特定的marshaller配置属性,但没有找到有用的东西。 似乎有一个类似的xjc插件[1],但如果没有标准的JAXB方法,我会有点惊讶。

非常感谢任何指针,谢谢。

[1] http://fisheye5.cenqua.com/browse/~raw,r=1.5/jaxb2-commons/www/default-value/index.html

2 个答案:

答案 0 :(得分:2)

XML模式规范仅处理解组,即确定源XML表示的后验证信息集。

JAXB似乎反映了它对默认值的支持,即主要是阅读。例如,对默认属性的支持不会扩展到编写默认值,只是为了读取(或使用getter从Java访问)

正如我所看到的,解决方案的最佳选择是扩展默认值插件以处理固定元素,方法是将字段设为最终并删除设置器。

code for the plugin非常简单,真的!

答案 1 :(得分:0)

可以使用maven-plugin生成常量:https://github.com/fbdo/jaxb2-fixed-value