如何使用JAXB2.0禁用DTD提取
我正在尝试使用JAXB解压我最初使用xjc创建的一些XML。我不想对解组进行任何验证,但是即使我已根据JAXB文档使用禁用了验证u.setSchema(null);
,但这并不能防止FileNotFoundException
在尝试运行并找不到架构时引发验证。
JAXBContext jc = JAXBContext.newInstance("blast");Unmarshaller u = jc.createUnmarshaller();
u.setSchema(null);
return u.unmarshal(blast)
通过将apache属性设置http://apache.org/xml/features/validation/schema
为false
,我已经看到了类似的问题,无法通过验证禁用SAX解析,但是我无法让Unmarshaller使用我自己的sax解析器。
回答:
以下是示例代码,演示了如何获取
实现以使用SAX解析器:
import java.io.FileReader;import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.transform.sax.SAXSource;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Foo.class);
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
XMLReader xmlReader = spf.newSAXParser().getXMLReader();
InputSource inputSource = new InputSource(new FileReader("input.xml"));
SAXSource source = new SAXSource(xmlReader, inputSource);
Unmarshaller unmarshaller = jc.createUnmarshaller();
Foo foo = (Foo) unmarshaller.unmarshal(source);
System.out.println(foo.getValue());
}
}
以上是 如何使用JAXB2.0禁用DTD提取 的全部内容, 来源链接: utcz.com/qa/414763.html