我正在尝试使用以下代码段整理邮件:
JAXBContext jContext = JAXBContext.newInstance(Iq.class);
Marshaller m = newJAXBContext.createMarshaller();
m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
Bind bind = new Bind();
bind.setResource("resource");
Iq iq = new Iq();
iq.setId(iqId);
iq.setType("set");
iq.getAnies().add(bind);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
m.marshal(iq, baos);
在此,Iq和Bind是由相关xmpp模式形成的对象。我的问题是,对于jaxb 2.0和更高版本,所有名称空间都在root元素中声明:
<iq from='juliet@example.com/balcony'
id='rg1'
type='get' xmlns='jabber:client' xmlns:ns1='urn:ietf:params:xml:ns:xmpp-bind'>
<ns1:bind>
<ns1:resource>resource</ns1:resource>
</ns1:bind>
</iq>
但是,这里需要的是名称空间应占据适当的位置:
<iq from='juliet@example.com/balcony'
id="rg1"
type="get" xmlns="jabber:client">
<bind xmlns="urn:ietf:params:xml:ns:xmpp-bind">
<resource>resource</resource>
</bind>
</iq>
有没有办法通过JAXB 2.0或更高版本在第二个xml节中封送xmpp节?
长话短说,这里有两个问题:1.在适当的位置声明名称空间。2.删除我知道可以使用NamespacePrefixMapper删除的名称空间前缀吗?虽然不确定,但举个例子会很好。
蓝山帝景
烙印99
相关分类