Это JAXB, и чтобы ваш пример работал, вам нужно предоставить корневой элемент и информацию о пространстве имен:
Корневой элемент
Когда вы выполняете маршалинг объекта с помощью JAXBдля этого требуется информация о корневом элементе.Один из способов сделать это - аннотировать ваш Download
класс с помощью @XmlRootElement
@XmlRootElement(name="Download")
public class Download
Если вы не можете этого сделать, вам нужно будет обернуть свой экземпляр Download
в JAXBElement
:
Download download = new Download();
QName qname = new QName("HTTP://xyz.abc.Com//Vendor/DownloadWSE.xsd";
JAXBElement<Download> jaxbElement = new JAXBElement(qname, "Download"), Download.class, download);
Квалификация пространства имен
Кроме того, чтобы получить квалификацию пространства имен, вы должны использовать аннотацию уровня @XmlSchema
пакета:
@XmlSchema(
namespace="HTTP://xyz.abc.Com//Vendor/DownloadWSE.xsd",
elementFormDefault=XmlNsForm.QUALIFIED)
package your.model.package.containing.download;
import javax.xml.bind.annotation.*;
Демо
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 jc = JAXBContext.newInstance(Download.class);
Download download = new Download();
QName qname = new QName("HTTP://xyz.abc.Com//Vendor/DownloadWSE.xsd";
JAXBElement<Download> jaxbElement = new JAXBElement(qname, "Download"), Download.class, download);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jaxbElement, System.out);
}
}