项目里用 Groovy 做 XML 解析。在做并发测试的时候发现 Groovy XmlSlurper 存在一个线程安全的问题。(一段时间前解决的问题,日志被删,不能贴出具体异常了)。
存在问题的写法是
XmlSlurper xmlSlurper = new XmlSlurper()
很简单,就是 new 一个就行了。但是在并发环境下会存在问题,原因是 XmlSlurper 获取 SaxParser 的问题。异常信息是这么写的,具体的原因由于没有细看 XmlSlurper 的源码,所以也就没有资格说了。
解决方法是:
def factory = SAXParserFactory.newInstance()
factory.setNamespaceAware(true);
factory.setValidating(false);
SAXParser parser = factory.newSAXParser()
XmlSlurper xmlSlurper = new XmlSlurper(parser)