全网首发:org.xml.sax.SAXNotRecognizedException: unrecognized features nonvalidating/load-external-dtd

具体错误:

[INFO] Loading inherited module 'org.teavm.samples.benchmark.benchmark'
[INFO]    [ERROR] Failure while parsing XML
[INFO] org.xml.sax.SAXNotRecognizedException: unrecognized feature http://apache.org/xml/features/nonvalidating/load-external-dtd
[INFO] 	at org.gjt.xpp.sax2.Driver.setFeature(Driver.java:178)
[INFO] 	at org.gjt.xpp.jaxp11.SAXParserImpl.setFeatures(SAXParserImpl.java:149)
[INFO] 	at org.gjt.xpp.jaxp11.SAXParserImpl.<init>(SAXParserImpl.java:132)
[INFO] 	at org.gjt.xpp.jaxp11.SAXParserFactoryImpl.newSAXParserImpl(SAXParserFactoryImpl.java:114)
[INFO] 	at org.gjt.xpp.jaxp11.SAXParserFactoryImpl.setFeature(SAXParserFactoryImpl.java:142)
[INFO] 	at com.google.gwt.dev.util.xml.ReflectiveParser.createNewSaxParser(ReflectiveParser.java:61)
[INFO] 	at com.google.gwt.dev.util.xml.ReflectiveParser.access$000(ReflectiveParser.java:48)
[INFO] 	at com.google.gwt.dev.util.xml.ReflectiveParser$Impl.parse(ReflectiveParser.java:345)
[INFO] 	at com.google.gwt.dev.util.xml.ReflectiveParser$Impl.access$200(ReflectiveParser.java:70)
[INFO] 	at com.google.gwt.dev.util.xml.ReflectiveParser.parse(ReflectiveParser.java:431)
[INFO] 	at com.google.gwt.dev.cfg.ModuleDefLoader.nestedLoad(ModuleDefLoader.java:316)
[INFO] 	at com.google.gwt.dev.cfg.ModuleDefLoader.load(ModuleDefLoader.java:243)
[INFO] 	at com.google.gwt.dev.cfg.ModuleDefLoader.doLoadModule(ModuleDefLoader.java:193)
[INFO] 	at com.google.gwt.dev.cfg.ModuleDefLoader.loadFromResources(ModuleDefLoader.java:151)
[INFO] 	at com.google.gwt.dev.cfg.ModuleDefLoader.loadFromClassPath(ModuleDefLoader.java:126)
[INFO] 	at com.google.gwt.dev.Compiler.compile(Compiler.java:139)
[INFO] 	at com.google.gwt.dev.Compiler$1.run(Compiler.java:118)
[INFO] 	at com.google.gwt.dev.CompileTaskRunner.doRun(CompileTaskRunner.java:55)
[INFO] 	at com.google.gwt.dev.CompileTaskRunner.runWithAppropriateLogger(CompileTaskRunner.java:50)
[INFO] 	at com.google.gwt.dev.Compiler.main(Compiler.java:125)
  • 解决办法一(无效)

在编译脚本中,加入:

JAVA_OPTIONS="${JAVA_OPTIONS} -Djavax.xml.parsers.SAXParserFactory=com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl"

export JAVA_OPTIONS
  • 解决办法二(有效)

看到一篇文章,受到启发(大哥你这还好意思说自己是首发?,标题不一样嘛,哈哈):

https://blog.csdn.net/SCTOM/article/details/83100430

在pom.xml中,把xercesImpl置于所有jar之前。具体来说:

  <dependencies>

    <dependency>
        <groupId>org.apache.xerces</groupId>
        <artifactId>xercesImpl-2.12.0</artifactId>
        <version>2.12.0</version>
        <scope>system</scope>
        <systemPath>${HOME}/.m2/repository/xerces/xercesImpl/2.12.0/xercesImpl-2.12.0.jar</systemPath>
    </dependency>

。。。。。。

 

### Android 中解决 `SAXNotRecognizedException` 和 `disallow-doctype-decl` 的方法 在 Android 开发环境中,如果尝试通过 XML 处理器设置某些特性(如 `"http://apache.org/xml/features/disallow-doctype-decl"`),可能会抛出 `SAXNotRecognizedException` 异常。这是因为 Android 使用的是基于 AOSP (Android Open Source Project) 的简化版 XML 解析库,部分标准 SAX 特性可能不受支持。 为了有效防止 XXE(XML External Entity)攻击并避免此类异常,可以采取以下措施: #### 方法一:禁用外部实体解析 可以通过关闭外部通用实体和参数实体来减少风险。以下是实现方式的一个示例代码片段[^3]: ```java import org.dom4j.io.SAXReader; import java.io.StringReader; public class XmlParser { public static void parseXml(String xmlContent) throws Exception { SAXReader reader = new SAXReader(); // 关闭 DOCTYPE 声明 try { reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true); } catch (org.xml.sax.SAXNotRecognizedException e) { System.out.println("The feature 'disallow-doctype-decl' is not recognized."); } // 禁用外部通用实体 reader.setFeature("http://xml.org/sax/features/external-general-entities", false); // 禁用外部参数实体 reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false); StringReader stringReader = new StringReader(xmlContent.trim()); Document document = reader.read(stringReader); } } ``` 上述代码中,即使 `"http://apache.org/xml/features/disallow-doctype-decl"` 抛出了 `SAXNotRecognizedException`,程序仍能继续运行,并成功禁用了其他潜在的安全隐患。 --- #### 方法二:使用自定义 XML Reader 实现过滤机制 对于更复杂的场景,可考虑创建一个继承于默认 XMLReader 的类,在其中手动拦截 DOCTYPE 定义。这种方式绕过了不被识别的功能需求,同时提供了更高的灵活性[^1]。 --- #### 方法三:替换为更安全的解析工具 如果现有 API 存在兼容性问题,则建议切换到更为现代化且安全性更强的第三方库,例如 **Jsoup** 或者 **Jackson Data Binding** 来替代传统的 DOM/SAX 方式处理数据流[^4]。 --- ### 注意事项 尽管设置了以上配置项,但在实际应用过程中还需验证其效果是否达到预期目标。例如测试输入恶意构造的数据样本时是否会触发错误响应或者泄露敏感资源等内容。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柳鲲鹏

能给阁下一点帮助,非常荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值