Java: Marshalling Object -- Removing extra ns2 annotation in xml
By adding a namespace URI ("http://www.something.com/something") to the QName
used to construct the JAXB element, and leveraging the package level @XmlSchema
annotation will get you the namespace qualification that you are looking for:
package-info
@XmlSchema( namespace="http://www.something.com/something", elementFormDefault=XmlNsForm.QUALIFIED)package forum7014746;import javax.xml.bind.annotation.*;
Food
package forum7014746;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElementpublic class Food { private String food; private String beverage; public String getFood() { return food; } public void setFood(String food) { this.food = food; } public String getBeverage() { return beverage; } public void setBeverage(String beverage) { this.beverage = beverage; }}
Demo
package forum7014746;import javax.xml.bind.JAXBContext;import javax.xml.bind.JAXBElement;import javax.xml.bind.Marshaller;import javax.xml.namespace.QName;public class Demo { public static void main(String[] args) throws Exception { JAXBContext jaxbContext = JAXBContext.newInstance(Food.class); Food foodSchema = new Food(); foodSchema.setFood("steak"); foodSchema.setBeverage("water"); JAXBElement<Food> element = new JAXBElement<Food> (new QName("http://www.something.com/something","FoodSchema"), Food.class, foodSchema); Marshaller marshaller = jaxbContext.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(element, System.out); }}
Output
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><FoodSchema xmlns="http://www.something.com/something"> <beverage>water</beverage> <food>steak</food></FoodSchema>
add to xsd schema definition elementFormDefault and attributeFormDefault:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" ...elementFormDefault="qualified" attributeFormDefault="unqualified" ... >
Thanks for answer. Just to give sample code before:
marshaller.marshal(new JAXBElement(new QName(**""**,"Document"),Document.class,swiftDoc), sw);
after:
marshaller.marshal(new JAXBElement(new QName(**"http://www.w3.org/2001/XMLSchema**","Document"),Document.class,swiftDoc), sw);
and extra "ns:" was removed.