首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DocumentBuilderFactory获取可用的功能?

DocumentBuilderFactory获取可用的功能?
EN

Stack Overflow用户
提问于 2015-10-23 09:52:17
回答 1查看 1.6K关注 0票数 2

我正在尝试在DocumentBuilderFactory上设置功能。但是,它只是抛出一个javax.xml.parsers.ParserConfigurationException,并将特性名称作为消息:

代码语言:javascript
复制
public void execute() throws Exception
{
    // Get the factory.
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();

    // Xerces 1 - http://xerces.apache.org/xerces-j/features.html#external-general-entities
    // Xerces 2 - http://xerces.apache.org/xerces2-j/features.html#external-general-entities
    setFeature(dbf, "http://xml.org/sax/features/external-general-entities", false);

    // Xerces 2 only - http://xerces.apache.org/xerces-j/features.html#external-general-entities
    setFeature(dbf, "http://apache.org/xml/features/disallow-doctype-decl", true);

    ...
}

private void setFeature(DocumentBuilderFactory dbf, String name, boolean value)
{
    try {
        dbf.setFeature(name, value);
    } catch (ParserConfigurationException e) {
        e.printStackTrace(); // <- see below
    }
}

该错误没有提供任何有用的信息:

代码语言:javascript
复制
javax.xml.parsers.ParserConfigurationException: http://xml.org/sax/features/external-general-entities
    at org.apache.harmony.xml.parsers.DocumentBuilderFactoryImpl.setFeature(DocumentBuilderFactoryImpl.java:101)
    at com.kounta.printing.epson.EpsonReceiptTranslator.setFeature(EpsonReceiptTranslator.java:76)
    at com.kounta.printing.epson.EpsonReceiptTranslator.execute(EpsonReceiptTranslator.java:49)
    at com.kounta.printing.epson.EpsonPrintJob$1.run(EpsonPrintJob.java:48)
    at com.kounta.util.TaskQueue.internalRun(TaskQueue.java:68)
    at com.kounta.util.TaskQueue.access$100(TaskQueue.java:11)
    at com.kounta.util.TaskQueue$InternalRunnable.run(TaskQueue.java:79)
    at java.lang.Thread.run(Thread.java:841)

有没有办法获得所有受支持的特性?还是我做错了什么?这两个功能都会抛出异常。

EN

回答 1

Stack Overflow用户

发布于 2015-10-23 13:30:32

因此,事实证明,默认提供的XML解析器是垃圾和不完整的(这并不奇怪,因为这是android),我最终发现了问题:

https://android.googlesource.com/platform/libcore/+/6bcf32ab404c39b85d25430f6df16503ef3526cf/xml/src/main/java/org/apache/harmony/xml/parsers/DocumentBuilderFactoryImpl.java#101

因此,尽管文档要求所有的XML解析器都支持FEATURE_SECURE_PROCESSING -http://developer.android.com/reference/javax/xml/parsers/SAXParserFactory.html#setFeature(java.lang.String,%20boolean),但实际上并非如此。

解决方案是我必须使用一个不同的库来处理XML的解析。

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

https://stackoverflow.com/questions/33293640

复制
相关文章

相似问题

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