在编组JAXB除去的xmlns从根元素属性(remove xmlns attribute from

2019-08-19 07:45发布

这可能是一个涉及到JAXB的Marshaller -如何抑制的xmlns名称空间的属性?

但我的问题是有点不同。 我做普通的Java编组和我的xsd没有namespaces.The生成XML是没有命名空间为好,除了根元素。

<?xml version="1.0" encoding="UTF-8"?><rootElement xmlns:ns2="unwanted namespace">

unwanted namespace是从同一个项目另一个模式,我不知道这是为什么被拾起在这个阶段。

通过JAXB2 - Maven的插件生成我rootElement.java是这样的:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"feed"
})
@XmlRootElement(name = "rootElement", namespace = "")
public class RootElement{
....
}

在这一点上我要的是摆脱的xmlns:ns2="unwanted namespace"从生成的XML属性,我与它挣扎。

我看了看我的package-info.java,它看起来像:

@javax.xml.bind.annotation.XmlSchema(namespace = "unwanted namespace", elementFormDefault =   javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package com.mypackage;

我试着将他-npa但它不会工作jaxb2-maven-plugin出于某种原因。 我试过NamespaceMapper但适用于不断变化的前缀。 我不能让它完全删除的命名空间。 这是现在困扰我的一天。

Answer 1:

我目前所面对的类似要求。 这工作对我来说唯一的解决办法正在实施XMLStreamWriter的包装。

请看看我的答案在这里 。 我还描述有其他的解决办法我试过了。

使用代码从上面的链接序列化看起来是这样的:

XMLOutputFactory factory = XMLOutputFactory.newFactory();

StringWriter writer = new StringWriter(XML_BUFFER_INITIAL_SIZE);
XMLStreamWriter xmlWriter = null;

try {
  xmlWriter = factory.createXMLStreamWriter(writer);
  JAXBContext context = JAXBContext.newInstance(MyJAXBGeneratedClass.class);
  Marshaller marshaller = context.createMarshaller();
  marshaller.marshal(reportContainer, new NamespaceStrippingXMLStreamWriter(xmlWriter));
  xmlWriter.flush();
}
finally {
  if (xmlWriter != null)
    xmlWriter.close();
}

return writer.toString();


文章来源: remove xmlns attribute from the root element while marshalling jaxb