namespaces - 在 JAXB 编码时删除命名空间前缀

标签 namespaces jaxb marshalling prefix

我有从模式创建的 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/

相关文章:

xml - XSLT 使用 Saxon 更改属性命名空间

php - 未找到 Drupal 类

java - 具有 List<Element> (@XmlAnyElement) 类型属性的 JAXB 编码对象不输出节点值

C++ — `algorithm` 库和命名空间 `std`

xml - Java/Jersey/JAXB/MOXy - 序列化给定基类对象的派生成员

java - 在 SLSB 和 JAX-WS 中指定 JAXB 包

rest - 如何在 CXF 中向 JAXBContext 添加其他类

c# - 如果结构包含 DateTime 字段,为什么 LayoutKind.Sequential 的工作方式不同?

c# - 如何在托管代码中正确翻译 WH_MOUSE lparam

php - 在@param 中使用命名空间