JAXB使用XMLReader解组时的未读属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAXB使用XMLReader解组时的未读属性相关的知识,希望对你有一定的参考价值。
到目前为止,我已经使用以下代码解组XML:
JAXBContext jc = JAXBContext.newInstance(clasz);
Unmarshaller u = jc.createUnmarshaller();
StringReader reader = new StringReader(xml);
return (T) u.unmarshal(reader);
但是,由于我现在需要设置一些安全功能(例如阻止访问外部DTD,我这样做:
JAXBContext jc = JAXBContext.newInstance(clasz);
SAXParserFactory spf = SAXParserFactory.newInstance();
XMLReader xmlReader = spf.newSAXParser().getXMLReader();
// Parser feature switch
// spf.setFeature("http://xml.org/sax/features/external-general-entities", false);
InputSource inputSource = new InputSource(new StringReader(xml));
SAXSource source = new SAXSource(xmlReader, inputSource);
Unmarshaller u = jc.createUnmarshaller();
return (T) u.unmarshal(source);
奇怪的是,结果却不同。在第二种情况下,我的xml属性都没有被读取。例如,
<a with="MO2+IG4+IG5+XZ0" ned="N02">41560113</a>
对应于对象A,但其带有和ned的属性对于第二个代码是空的,而正确读取的值。
任何可能导致此问题的提示,或可能的解决方案将不胜感激。 (注意我的xml没有使用名称空间)
答案
我不完全确定为什么导致这个问题,但我已经解决了不同的问题。
所以,希望这有助于任何人:
JAXBContext jc = JAXBContext.newInstance(clasz);
XMLInputFactory xif = XMLInputFactory.newFactory();
xif.setProperty(XMLInputFactory.IS_VALIDATING, validate);
xif.setProperty(XMLInputFactory.SUPPORT_DTD, supportDTD);
xif.setProperty(XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES, supportExternalEntities);
XMLStreamReader xsr = xif.createXMLStreamReader(new StringReader(xml));
Unmarshaller u = jc.createUnmarshaller();
return (T) u.unmarshal(xsr);
以上是关于JAXB使用XMLReader解组时的未读属性的主要内容,如果未能解决你的问题,请参考以下文章