如何防止 JAXB 在编组期间写入未使用的名称空间
在使用 JAXB 对对象进行封送处理期间,是否有人能够除去未使用的命名空间?以下是所请求功能的链接:https://github.com/javaee/jaxb-v2/issues/103(请参阅说明)
是否有用于为此配置 JAXB 的属性?这个问题在MOXy中是否已修复?
我目前正在遍历需要编组的对象,并提取所有需要绑定到 .然后我创建一个新的Class[] classesToBeBound
JAXBContext.newInstance(classesToBeBound)
未使用的命名空间现在不包括在 XML 中。
我知道即使对于未使用的命名空间,xml验证也是有效的,但对我来说,这是框架应该处理的事情。
下面的链接 https://blogs.oracle.com/enterprisetechtips/entry/customizing_jaxb 提到了各种固定的(参见文本中间的某个地方),但是当试图在这些链接中找到解决方案时,要么链接断开,要么没有人真正解决它。
欢迎任何意见。
(编辑)纯文本:
鉴于
a new instance of JAXBContext and add 2 classes with each a separate namespace.
什么时候
marshalling a class that has these 2 classes as a property but only 1 of them is not null
然后
I expect only the namespace of the property that is not null to be visible in the XML.
但实际情况是
that both namespaces are in the xml.
所以我的问题是,如何删除或告诉 JAXB 不要编写未使用的命名空间?
把它放在java代码中:GIVEN
public class Foo{
private Bar bar; //namespace something2
private User user; //namespace user
}
什么时候
JAXBContext c = JAXBContext.newInstance(Foo.class, Bar.class, User.class);
...
Foo foo = new Foo();
foo.setBar(null);
foo.setUser(new User("Bob"));
marshaller.umarshal(foo);
然后我希望xml是
<foo xmlns="something1" xmlns:user="user">
<user:name>Bob</user:name>
</foo>
但实际是(注意 something2 命名空间)
<foo xmlns="something1" xmlns:user="user" xmlns:bar="something2">
<user:name>Bob</user:name>
</foo>
当然,这是一个简化的示例,我们对一种类型的规范有大约30个不同的命名空间。