有没有办法在不修改代码的情况下修改JAXB生成的xml前缀?
我正在使用 JAXB 将对象编组到 xml,现在生成的 xml 就像
<QueryServiceElement xmlns="http://tools.ding.com/query">
</QueryServiceElement>
我想要的是:
<ts1:QueryServiceElement xmlns:ts1="http://tools.ding.com/query">
</ts1:QueryServiceElement>
由于代码已与多个地方共享,所以我不能在 JAXB Marshaller 中使用 mapper 属性,而且我的 jaxb 也不能支持mapper属性,它会抛出异常,有什么方法可以通过修改xsd文件或jaxb模式绑定来做到这一点?
我尝试了很多方法,但都行不通。
I am using JAXB to marshall the object to xml, now the xml generated is like
<QueryServiceElement xmlns="http://tools.ding.com/query">
</QueryServiceElement>
What I want is:
<ts1:QueryServiceElement xmlns:ts1="http://tools.ding.com/query">
</ts1:QueryServiceElement>
As the code has been shared with multiple places, so I can't use mapper property in the JAXB Marshaller, and my jaxb also not support the mapper property, it throws exception, is there any way to do this by just modify xsd files or jaxb schema binding?
I have try many ways, but they are all not work.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
不幸的是,在生成的 XML 中生成(甚至使用)名称空间前缀的行为完全取决于编组器,与 XSD 无关。
http://blogs.oracle.com/enterprisetechtips/entry/customizing_jaxb 有一个很好的解释如何处理自定义命名空间前缀生成。从你的问题来看,你似乎已经意识到了这一点。它是 JAXB 2.0+ 功能,因此如果您的 jaxb 实现不支持它,也许是时候获取更高版本了?
unfortunately, the act of generating (or even using) namespace prefixes in the resultant XML is completely up to the marshaller and has nothing to do with the XSD.
http://blogs.oracle.com/enterprisetechtips/entry/customizing_jaxb has a good explanation of how to deal with custom namespace prefix generation. from your question, it seems you're already aware of this. it is a JAXB 2.0+ feature, so if your jaxb implementation doesn't support it, maybe it's time to get a later version?