2013-04-03 63 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();