Spring   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了java – 最佳实践:为XMLReader创建SAX解析器大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我在同一个tomcat上运行的两个单独的战争中使用Amazon S3 SDK.我在我的一个Spring服务的@postconstruct中初始化了一个AmazonS3Client.

如果我分开运行这些战争,一切通常都可以.如果我一起运行它们中的一个 – 第二个启动它 – 抛出以下异常:

我有一个解决方法,在捕获AmazonClientexception后,如果发生这种情况,我会设置以下System@L_944_10@:

try {
  init();
} catch (AmazonClientexception asE) {
  System.setProperty("org.xml.sax.driver","com.sun.org.apache.xerces.internal.parsers.SAXParser");
  init();
}

但这当然是可怕的.有一个更好的方法吗?为什么会出现这种情况?

更新:首先,似乎将AmazonS3Client的初始化移出@postconstruct并且懒洋洋地初始化它可以完全阻止此错误.但显然有时候它仍然会发生 – 即使我只进行一场战争而不是两场战争.

最佳答案
XMLReader通过一系列步骤来识别要使用的驱动器.引用文档

>如果系统@L_944_10@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系统@L_944_10@通常可用.)

看看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()可能会导致一些难以调试的问题.

这些要点使调试问题变得更加困难.我能做出的最有根据的猜测是,深红色解析器可以在一个类加载路径中访问,但在另一个类加载路径中不存在.找到问题的一种结论性方法是在代码上设置一个断点,该代码试图实例化读者并找出潜在的根本原因.

大佬总结

以上是大佬教程为你收集整理的java – 最佳实践:为XMLReader创建SAX解析器全部内容,希望文章能够帮你解决java – 最佳实践:为XMLReader创建SAX解析器所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。