jaxb将不需要的命名空间声明附加到标记

ldxq2e6h  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(358)

我正在实现xmpp的一个自制子协议,并使用stax和jaxb的组合来解析/编组mesages。当我整理一条消息时,我会得到大量不需要的命名空间声明:

<ns2:auth xmlns:ns2="urn:ietf:params:xml:ns:ilf-auth" 
   xmlns:ns4="ilf:iq:experiment:power" xmlns:ns3="ilf:iq:experiment:init" 
   xmlns:ns5="ilf:iq:experiment:values" xmlns:ns6="ilf:iq:experiment:result" 
   xmlns:ns7="ilf:iq:experiment:stop" xmlns:ns8="ilf:iq:experiment:end">
   compton@ilf</ns2:auth>

而不是:

<ns:auth xmlns:ns="urn:ietf:params:xml:ns:ilf-auth>compton@ilf</ns:auth>

有没有办法扭转这种局面?
所有这些名称空间都用在不同的消息中,这些消息由jaxb进行编组/解编,但每个消息都使用一个名称空间。
另外,我不是xmlMaven,如果我犯了一些愚蠢的错误,请不要对我大喊大叫;)

w51jfk4q

w51jfk4q1#

您正在寻找的功能是作为第103期中jaxb问题跟踪器的增强而请求的。这个增强被拒绝了,因为jaxb作者发现在实际的序列化开始确定实际需要哪些名称空间之前再次遍历对象树代价太高。
尽管有些臃肿,但不必要的名称空间并没有使xml文档无效。如果您真的需要节省几个字节并且额外的计算成本是可以承受的,那么编写自己的xml处理器/过滤器应该非常容易,它接收jaxb输出,解析文档并编写一个没有未使用的名称空间定义的新文档。

相关问题