如何使用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/schemafalse,我已经看到了类似的问题,无法通过验证禁用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

回到顶部