您可以爲此類任務編寫一個xmljavatype適配器。
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Foo {
@XmlJavaTypeAdapter(BazXmlAdapter.class)
@XmlAnyElement
String baz;
String bar;
}
任何用來告訴JAXB任何內容,這裏允許(避免了illegalannotation異常,因爲JAXB不能處理接口)
public class BazXmlAdapter extends XmlAdapter<Element, String> {
@Override
public Element marshal(String v) throws Exception {
// TODO NYI Auto-generated method stub
throw new UnsupportedOperationException();
}
@Override
public String unmarshal(Element node) throws Exception {
TransformerFactory transFactory = TransformerFactory.newInstance();
Transformer transformer = transFactory.newTransformer();
StringWriter buffer = new StringWriter();
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.transform(new DOMSource(node), new StreamResult(buffer));
return buffer.toString();
}
}
適配器執行只是一個簡單的DOM系列化,沒有什麼花哨。您可以改用內容的JAXB模型並對其進行序列化。比你不需要@XmlAnyElement
要麼。
@Test
public void unmarshalPartialXml() throws Exception {
String partial = "<baz attr=\"something\"/>";
String xml = "<foo><bar>asdf</bar>" + partial + "</foo>";
Unmarshaller unmarshaller = JAXBContext.newInstance(Foo.class)
.createUnmarshaller();
Foo foo = (Foo) unmarshaller.unmarshal(new StringReader(xml));
assertThat(foo.baz, is(equalTo(partial)));
}
的[我如何指定JAXB用來編組/解組數據時,適配器(S)?(
可能重複http://stackoverflow.com/questions/5957708/how-do-i-specify- - 適配器 - which-jaxb-uses-marshaling-unmarshaling-data) –