JAXB: отсутствует пространство имен
Я пытаюсь сериализовать XML из класса, созданного с помощью JAXB.
Класс:
package ws.avail;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"pos",
"uniqueID",
"availStatusMessages"
})
@XmlRootElement(name = "OTA_HotelAvailNotifRQ")
public class OTAHotelAvailNotifRQ {
...
}
Файл "package-info.java":
@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.opentravel.org/OTA/2003/05", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package ws.avail;
Маршаллер (упрощенный без обработки ошибок):
context = JAXBContext.newInstance(rootElement.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(rootElement, stringWriter);
return stringWriter.toString();
Этот код генерирует:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<OTA_HotelAvailNotifRQ Version="1.000" Target="TEST">
....
Я ожидаю что-то вроде этого:
<?xml version="1.0" encoding="UTF-8"?>
<OTA_HotelAvailNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.000" Target="TEST">
....
У меня похожий код, и он работает правильно, но я не могу понять, почему этот код не отображает пространство имен. Любая подсказка? Спасибо!
1 ответ
Решение
Ваши карты правильны
Я опробовал вашу модель, и она работает для меня:
демонстрация
package ws.avail;
import java.io.StringWriter;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
OTAHotelAvailNotifRQ rootElement = new OTAHotelAvailNotifRQ();
StringWriter stringWriter = new StringWriter();
JAXBContext context = JAXBContext.newInstance(rootElement.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.marshal(rootElement, stringWriter);
System.out.println(stringWriter.toString());
}
}
Выход
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><OTA_HotelAvailNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"/>
РЕШЕНИЕ
Обычно, когда возникает эта проблема, package-info
класс не был скомпилирован или не упакован с приложением.
ДЛЯ ДОПОЛНИТЕЛЬНОЙ ИНФОРМАЦИИ