我有从模式创建的 JAXB 对象。在编码时,xml 元素使用 ns2 进行注释。对于这个问题,我已经尝试了网络上存在的所有选项,但没有一个有效。我无法修改我的架构或更改 package-info.java。请帮忙
最佳答案
经过大量研究和修补,我终于设法解决了这个问题。请接受我的歉意,因为我没有发布原始引用文献的链接 - 有很多我没有做笔记 - 但是 this一个肯定有用。
我的解决方案使用过滤 XMLStreamWriter
它应用了一个空的命名空间上下文。
public class NoNamesWriter extends DelegatingXMLStreamWriter {
private static final NamespaceContext emptyNamespaceContext = new NamespaceContext() {
@Override
public String getNamespaceURI(String prefix) {
return "";
}
@Override
public String getPrefix(String namespaceURI) {
return "";
}
@Override
public Iterator getPrefixes(String namespaceURI) {
return null;
}
};
public static XMLStreamWriter filter(Writer writer) throws XMLStreamException {
return new NoNamesWriter(XMLOutputFactory.newInstance().createXMLStreamWriter(writer));
}
public NoNamesWriter(XMLStreamWriter writer) {
super(writer);
}
@Override
public NamespaceContext getNamespaceContext() {
return emptyNamespaceContext;
}
}
您可以找到
DelegatingXMLStreamWriter
here .然后,您可以使用以下命令过滤编码 xml:
// Filter the output to remove namespaces.
m.marshal(it, NoNamesWriter.filter(writer));
我确信有更有效的机制,但我知道这个机制有效。
关于namespaces - 在 JAXB 编码时删除命名空间前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17222902/