JAXB将不需要的名称空间声明附加到标记

我正在实现一个自制的XMPP子协议,我正在使用StAX和JAXB的组合来解析/编组消息。 当我编组一条消息时,我最终会遇到大量不需要的命名空间声明:

 compton@ilf 

代替:

  compton@ilf 

有什么办法可以转变吗?

所有这些名称空间都用在由JAXB编组/解组的不同消息中,但每条消息都使用一个名称空间。

PS。 我不是XML专家,如果我犯了一些愚蠢的错误,请不要骂我;)

您要查找的function是作为问题103中 JAXB问题跟踪器的增强function而请求的。 由于JAXB作者发现在实际序列化开始确定实际需要哪些命名空间之前再次遍历对象树,因此增强function被拒绝了。

虽然相当臃肿,但不必要的命名空间不会使XML文档无效。 如果你真的必须保存几个字节并且额外的计算成本是可以承受的,那么编写你自己的XML处理器/filter应该很容易,它接受JAXB输出,解析文档并写入一个没有未使用的命名空间定义的新文档。