2013-04-03 61 views
5

的xmlns从根元素属性,这可能是一个相关JAXB Marshaller - How do I suppress xmlns namespace attributes?删除在编组JAXB

但我的问题是有点不同。 我做常规的java编组,并且我的xsd没有名称空间。生成的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{ 
.... 
} 

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

我看了看我的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,但它适用于更改前缀。我无法完全删除命名空间。这让我困扰了一整天。

回答

1

我目前有类似的要求。对我来说唯一的解决方案是为XMLStreamWriter实现一个包装器。

请看看我的回答here。我还描述了我尝试过的其他解决方案。上述

序列化使用的代码从链路看起来像这样:

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();