首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在分析xml文件时,是否应该始终创建EntityResolver,同时根据dtd验证它?

在分析xml文件时,是否应该始终创建EntityResolver,同时根据dtd验证它?
EN

Stack Overflow用户
提问于 2014-10-18 11:06:15
回答 1查看 3K关注 0票数 3

我有一个xml文件,我想使用JAXB将它转换成一个java对象。我得到了一个与验证相关的异常。看来JAXB正在根据xml文件中声明的DTD验证它。不幸的是,DTD不在xml文件中提到的位置。因此,我保留了一个本地副本,并使用了一个EntityResolver来使JAXB使用本地DTD。密码就像一种魅力。

下面是代码

代码语言:javascript
复制
JAXBContext context = JAXBContext.newInstance(Student.class);
            Unmarshaller unmarshaller = context.createUnmarshaller();

            final SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
            final XMLReader reader = saxParserFactory.newSAXParser().getXMLReader();
            reader.setEntityResolver(new EntityResolver() {

                @Override
                public InputSource resolveEntity(final String publicId, final String systemId) throws SAXException, IOException {

                    return new InputSource(getClass().getResourceAsStream("/student.dtd"));
                }
            });
            final SAXSource saxSource = new SAXSource(reader, new InputSource(inputStream));

            student = (Student) unmarshaller.unmarshal(saxSource);

这段代码在我的方法解析(XmlFilePath)中。每次我调用解析方法时,都会创建一个新的EntityResolver。这不是多余的吗?我可以在类的构造函数中创建一个EntityResolver并将其传递给setEntityResolver方法吗?

代码语言:javascript
复制
public StudentParser() {
this.entityResolver = new EntityResolver() {

                @Override
                public InputSource resolveEntity(final String publicId, final String systemId) throws SAXException, IOException {

                    return new InputSource(getClass().getResourceAsStream("/student.dtd"));
                }
            }
}

内解析法

代码语言:javascript
复制
public Student parse(filePath) {
    ...
    ...
    reader.setEntityResolver(this.entityResolver);
    ...
}
EN

回答 1

Stack Overflow用户

发布于 2014-10-18 11:27:01

首先,检查以下答案:

简而言之,您可以完全禁用DTD处理。

接下来,只要您的实体解析器是线程安全和可重用的,那么您肯定不需要每次都创建新实例。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26439066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档