XMLReader通过一系列步骤来识别要使用的驱动器.引用文档
>如果系统属性org.xml.sax.driver具有值,则使用该值
作为XMLReader类名.
> JAR“服务API”用于查看
对于META-INF / services / org.xml.sax.driver文件中的类名称
jarfiles可用于运行时.
> SAX解析器分发是
强烈建议提供一个默认的XMLReader类名
仅在先前的选项(在此列表中)不生效时才会生效
成功的.
>最后,如果ParserFactory.makeParser()可以返回一个
系统默认SAX1解析器,该解析器包装在一个
ParserAdapter. (这是SAX1环境的迁移辅助工具,其中
org.xml.sax.parser系统属性通常可用.)
看看AWS SDK的代码……
public XmlResponsesSaxParser() throws AmazonClientException {
// Ensure we can load the XML Reader.
try {
xr = XMLReaderFactory.createXMLReader();
} catch (SAXException e) {
// oops, lets try doing this (needed in 1.4)
System.setProperty("org.xml.sax.driver", "org.apache.crimson.parser.XMLReaderImpl");
try {
// Try once more...
xr = XMLReaderFactory.createXMLReader();
} catch (SAXException e2) {
throw new AmazonClientException("Couldn't initialize a sax driver for the XMLReader");
}
}
}
我不喜欢这些代码.
> SaxException e的根本原因被吃掉了.
> SaxException e2的根本原因也被吃掉了.代码应该做的最少是打印提示根本原因的警告.
>在级别框架代码中使用System.setProperty()可能会导致一些难以调试的问题.
这些要点使调试问题变得更加困难.我能做出的最有根据的猜测是,深红色解析器可以在一个类加载路径中访问,但在另一个类加载路径中不存在.找到问题的一种结论性方法是在代码上设置一个断点,该代码试图实例化读者并找出潜在的根本原因.