我在这里面临一个难题。
我开发的应用程序之一是加载 JAXP 的DocumentBuilderFactory类的错误实现。这种行为后来被推断是由不同团队/公司构建的不同应用程序中的另一个类引起的。所述类在加载时更改了首选的 DocumentBuilderFactory 类,包括一个类似于下面的静态块:
static
{
System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "a new factory");
}
如果通过DocumentBuilderFactory.newInstance方法的 Javadocs,很明显,当调用 newInstance 方法时,上述代码负责更改返回给所有应用程序的解析器实现。
应用了一个补丁,纠正了这个问题,但它让我问这个问题——如何确定哪个类在运行时执行 System.setProperty 调用?
我们已经生成了一个自定义构建的 OpenJDK,其中包含一个修改过的 System 类,该类负责找出罪魁祸首,原因很简单,因为我们无法访问服务器上部署的所有应用程序的所有源。但这之所以成为可能,是因为生产环境是完全复制的。因此,这个问题也可以解释为—— 在生产环境中,如何确定哪个类在运行时执行 System.setProperty 调用?