我想将一个封送对象(xml代码)附加到另一个要封送的对象中。
@XmlRootElement
object Child{
...
}
@XmlRootElement
object Parent{
@XmlElement
object Any;
}
Marshaling Child:
<child xmlns="namespaceOfChild.org">
<...>
<...>
<\child>
我想在Parent.Any上面设置xml,以便在编组Parent时显示代码。
<parent xmlns="namespaceOfParent.org">
<any>
<child xmlns="namespaceOfChild.org">
<...>
<...>
<\child>
<\any>
<\parent>
请注意,名称空间和子项的其他属性必须遵循child tag
作为上面的代码。当我在Parent.Any上设置对象Child本身时,我获得了成功,但Child的属性看起来像Parent的属性。
答案 0 :(得分:0)
我明白了!我可以将内部元素Child
保存在Document
(org.w3c.dom.Document)中,并使用该函数将返回Child
的{{1}}封送到document.getDocumentElement()
(org.w3c.dom.Node)。然后我使用此Node
在Node
中设置对象,然后我可以整理Parent.Any
。
编组儿童的功能:
Parent
封送父母的功能:
private static Node marshal(Object obj) throws JAXBException {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
Document doc = null;
try {
DocumentBuilder db = dbf.newDocumentBuilder();
doc = db.newDocument();
} catch (ParserConfigurationException ex) {
throw new JAXBException(ex);
}
context = JAXBContext.newInstance("org.openarchives.oai._2_0.oai_dc");
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(obj, doc);
return doc.getDocumentElement();
}
当我封送父级时,Child的属性位于private static void marshal(Object obj, OutputStream stream) throws JAXBException {
context = JAXBContext.newInstance("org.openarchives.oai._2");
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(obj, stream);
}
内,而Parent的属性位于<child>
内。
答案 1 :(得分:0)
很好的答案,它引导我在我的环境中找到最终的解决方案。
对于你们中的一个,我们试图用JAX-RS和JERSEY JAXB实现这一点,这是我必须做的最后一步。
假设我们有一个名为metadataType的父类,其子类型为“any”,我们想要分配一个名为Record的类
这是我在创建对象时所做的对象的“设置”
ReactDOM.render(
<Router history={hashHistory}>
<Route path="/" component={Main}>
<Route path="countdown" component={Countdown} />
</Route>
</Router>,
document.getElementById('app')
);
在类Record中我必须添加@XMLRootElement,如:
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());
然后,如果你让泽西马歇尔自动或不让这个对象生成
@XmlRootElement(name = "record",namespace = "http://www.europeana.eu/schemas/ese/")