通過XSLT流式傳輸XML的許多示例,然後將JAXB轉換爲Java對象。他們往往是這樣的:通過轉換將數據流轉換爲JAXB Unmarshaller,併爲根元素聲明類類型
Transformer responseTransformer = TransformerFactory.newInstance().newTransformer(new StreamSource(getClass().getResourceAsStream("ResponseTransformation.xsl")));
Unmarshaller jaxbUnmarshaller = JAXBContext.newInstance(ObjectFactory.class.getPackage().getName()).createUnmarshaller();
JAXBResult jaxbResult = new JAXBResult(jaxbUnmarshaller);
responseTransformer.transform(new StreamSource(new StringReader(responseXml)), jaxbResult);
res = jaxbResult.getResult();
也有聲明的類型像這樣通過JAXB解組的例子(從Unmarshaller的javadoc中):
JAXBContext jc = JAXBContext.newInstance("com.acme.foo");
Unmarshaller u = jc.createUnmarshaller();
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new File("nosferatu.xml"));
Element fooSubtree = ...; // traverse DOM till reach xml element foo, constrained by a
// local element declaration in schema.
// FooType is the JAXB mapping of the type of local element declaration foo.
JAXBElement<FooType> foo = u.unmarshal(fooSubtree, FooType.class);
注意我們是如何指定FooType.class根請撥打u.unmarshal(fooSubtree, FooType.class)
中的元素。尼斯。
問題是:有沒有一種方法可以像上面的例子一樣將處理流處理方式與指定聲明類型的方法結合起來?
我喜歡實現它的方式,但它需要訪問JAXB實現類。當然可以通過公共的JAXB接口來完成它,對嗎?
謝謝!