很好的答案,它引导我在我的环境中找到最终解决方案。
对于那些试图通过 JAX-RS 和 JERSEY JAXB 实现来实现这一点的人来说,这是我必须做的最后一步。
假设,我们有一个名为 metadataType 的父类,有一个 XML 类型为“any”的子类,我们想要分配一个名为 Record 的类
这是我在创建对象时所做的对象的“设置”
Document doc = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance(OAIPMHtype.class,Record.class,RDF.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://www.europeana.eu/schemas/ese/ " +
"http://www.europeana.eu/schemas/ese/ESE-V3.4.xsd");
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
try {
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.newDocument();
} catch (ParserConfigurationException ex) {
throw new JAXBException(ex);
}
jaxbMarshaller.marshal(record, doc);
} catch (JAXBException e) {
throw new JAXBException(e);
}
metadataType.setAny(doc.getDocumentElement());
在 Record 类中我必须添加 @XMLRootElement ,例如:
@XmlRootElement(name = "record",namespace = "http://www.europeana.eu/schemas/ese/")
那么,如果你让 Jersey Marshall 自动或不自动生成这个对象
<root xmlns="http://rootschema"><metadata><ese:record xmlns:ese="http://www.europeana.eu/schemas/ese/" schemaLocation="http://www.europeana.eu/schemas/ese/ http://www.europeana.eu/schemas/ese/ESE-V3.4.xsd"> <metadata> </root>