使用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
答案 0 :(得分:2)
XML模式规范仅处理解组,即确定源XML表示的后验证信息集。
JAXB似乎反映了它对默认值的支持,即主要是阅读。例如,对默认属性的支持不会扩展到编写默认值,只是为了读取(或使用getter从Java访问)
正如我所看到的,解决方案的最佳选择是扩展默认值插件以处理固定元素,方法是将字段设为最终并删除设置器。
code for the plugin非常简单,真的!
答案 1 :(得分:0)
可以使用maven-plugin生成常量:https://github.com/fbdo/jaxb2-fixed-value