如何使用 JAXB2.0 禁用 DTD 获取 [英] How to disable DTD fetching using JAXB2.0
问题描述
我正在尝试使用 JAXB 来解混一些我首先使用 xjc 创建的 XML.我不想对解组进行任何验证,但即使我根据 JAXB 文档使用 u.setSchema(null);
禁用了验证,但这并没有阻止 FileNotFoundException
在它尝试运行但找不到架构时被抛出.
I'm trying to use JAXB to unmashall some XML which I used xjc to create in the first place. I don't want to do any validation on the unmarshalling, but even though I have disabled the validation according to the JAXB documentation with u.setSchema(null);
, but this hasn't prevented a FileNotFoundException
being thrown when it tries to run and can't find the schema.
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 解析进行验证>,但我无法让解组器使用我自己的 sax 解析器.
I've seen similar questions for disabling SAX parsing from validation by setting the apache property http://apache.org/xml/features/validation/schema
to false
, but I can't get the Unmarshaller to use my own sax parser.
推荐答案
以下是演示如何获取 JAXB (JSR-222) 使用 SAX 解析器的实现:
Below is sample code that demonstrates how to get a JAXB (JSR-222) implementation to use your SAX parser:
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 获取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!