jab with XMLStringWriter - пространство имен не устанавливается для корневого элемента при использовании метода setPrefix
Я пытаюсь установить префикс пространства имен для всех элементов тега в XML. Я использую JAXB для маршеллинга и использую XMLStringWriter для установки префикса с помощью метода setPrefix. Я также использую package-json для использования XMLSchema и установки elementFormDefault, чтобы префикс пространства имен применялся ко всем элементам. Я не хочу использовать пространство имен по умолчанию в @XMLschema, потому что я не хочу создавать несколько пакетов.
Ниже приведен мой класс сущности:
@XmlRootElement(name = "Customer", namespace = "com.ssc.learn.myself")
public class Customer {
String name;
int age;
int id;
public String getName() {
return name;
}
public int getAge() {
return age;
}
public int getId() {
return id;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
public void setId(int id) {
this.id = id;
}
}
Следующее - мой основной класс:
public static void main( String[] args ) throws XMLStreamException, FactoryConfigurationError
{
Customer customer = new Customer();
customer.setAge(5);
customer.setId(1);
customer.setName("XXXX");
try {
JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
StringWriter result = new StringWriter();
XMLStreamWriter writer = XMLOutputFactory.newFactory().createXMLStreamWriter(result);
writer.setPrefix("ap", "com.ssc.learn.myself");
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.marshal(customer, writer);
System.out.println(result);
} catch (JAXBException e) {
e.printStackTrace();
}
}
}
Следующее - мой Package-info.java:
@javax.xml.bind.annotation.XmlSchema (
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED
)
package com.ss.learn.jaxb;
Выход:
<?xml version="1.0" ?><ap:Customer xmlns=""><age>5</age><id>1</id><name>XXXX</name></amp:Customer>
Ожидаемый результат
<?xml version="1.0" ?><ap:Customer xmlns="com.ssc.learn.myself"><ap:age>5</ap:age><ap:id>1</ap:id><name>XXXX</name></ap:Customer>
Будет полезно, если кто-нибудь поможет мне понять, почему xmlns="" вместо xmlns="com.ssc.learn.myself" . Если значение neons установлено правильно, префикс будет автоматически установлен для других элементов