gpt4 book ai didi

java - DocumentBuilderFactory 获取可用功能吗?

转载 作者:行者123 更新时间:2023-11-30 07:51:31 26 4
gpt4 key购买 nike

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

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
}
}

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

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)

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

最佳答案

事实证明,默认提供的 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 的解析。

关于java - DocumentBuilderFactory 获取可用功能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33293640/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com