首页 > 解决方案 > 如何配置 xerces 自定义 xincludehandler

问题描述

我使用自定义 XIncludeHandler 类的新实例在 Xerces 解析器配置上设置了“http://apache.org/xml/properties/internal/xinclude-handler”属性。然后,我使用该配置创建一个新的 SAXParser。我通过在配置和解析器上调用 getProperty() 来验证自定义 xincludehandler 是否已安装。

xinclude 处理已启用。

但是当我调用 parse() 时,解析器使用默认的 XIncludeHandler 类,如默认处理程序发现无效的 href 属性(我的自定义处理程序应该拦截和修复)时发出的堆栈跟踪所示。

  XML11Configuration parserConfig = new XIncludeAwareParserConfiguration();
  parserConfig.setProperty(
      "http://apache.org/xml/properties/internal/xinclude-handler",
      new XIncludeHrefFixer());
  XMLReader parser = new SAXParser(parserConfig);

我已经在 v2.12.0、2.12.1 和 2.9.1 中确认了这种行为。

堆栈跟踪的相关部分是:

[ERROR] [EventHandler-dev-481] [null] 3/28/21 15:15:54,038 com.example.org.XMLPipelineJob
Pipeline job "GenericXMLIndexerJob" failed: 'href' attribute value 'file=[[mumble[mumble[mumble[mumble%20with.tif_0005620928.xml' is syntactically invalid. After applying escaping rules the value is neither a syntactically correct URI or IRI.
org.xml.sax.SAXParseException; systemId: mumble-mumble.xml; lineNumber: 71; columnNumber: 44; 'href' attribute value 'file=[[mumble[mumble[mumble[mumble%20with.tif_0005620928.xml' is syntactically invalid. After applying escaping rules the value is neither a syntactically correct URI or IRI.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.xinclude.XIncludeHandler.reportError(Unknown Source)
    at org.apache.xerces.xinclude.XIncludeHandler.reportFatalError(Unknown Source)
    at org.apache.xerces.xinclude.XIncludeHandler.handleIncludeElement(Unknown Source)
    at org.apache.xerces.xinclude.XIncludeHandler.startElement(Unknown Source)
    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.xml.sax.helpers.XMLFilterImpl.parse(XMLFilterImpl.java:357)

标签: xerces2-j

解决方案


推荐阅读