ice*_*dek 5 java xml jaxb xml-namespaces jaxb2-maven-plugin
这可能与JAXB Marshaller有关 - 如何抑制xmlns命名空间属性?
但我的问题有点不同.我做常规的java编组,我的xsd没有名称空间.生成的xml也没有名称空间,除了根元素.
<?xml version="1.0" encoding="UTF-8"?><rootElement xmlns:ns2="unwanted namespace">
Run Code Online (Sandbox Code Playgroud)
该unwanted namespace是从同一个项目另一个模式,我不知道这是为什么被拾起在这个阶段.
我的rootElement.java由jaxb2-maven-plugin生成,如下所示:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"feed"
})
@XmlRootElement(name = "rootElement", namespace = "")
public class RootElement{
....
}
Run Code Online (Sandbox Code Playgroud)
在这一点上,我想要的是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;
Run Code Online (Sandbox Code Playgroud)
我尝试添加他,-npa但jaxb2-maven-plugin由于某种原因它不会工作.我尝试了NamespaceMapper但这适用于更改前缀.我无法完全删除名称空间.这让我困扰了一天.
小智 3
我现在也有类似的需求。对我有用的唯一解决方案是实现 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();
Run Code Online (Sandbox Code Playgroud)