ここで難問に直面しています。
私が開発したアプリケーションの 1 つは、JAXPのDocumentBuilderFactoryクラスの正しくない実装をロードしています。この動作は、別のチーム/会社によって構築された別のアプリケーションの別のクラスが原因であると後で推測されました。上記のクラスは、以下のような静的ブロックを含めることにより、ロード時に優先 DocumentBuilderFactory クラスを変更しました。
static
{
System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "a new factory");
}
DocumentBuilderFactory.newInstanceメソッドの Javadoc を見れば、newInstance メソッドが呼び出されたときに、上記のコードがすべてのアプリケーションに返されるパーサーの実装を変更していたことは明らかです。
この問題を修正するパッチが適用されましたが、この質問をするようになりました-どのクラスが実行時に System.setProperty 呼び出しを実行しているかをどのように判断しますか?
サーバーにデプロイされたすべてのアプリケーションのすべてのソースにアクセスできなかったという非常に単純な理由で、犯人を釘付けにする変更された System クラスを使用して、OpenJDK のカスタム ビルドを作成しました。しかし、これが可能になったのは、本番環境が完全に複製されたからです。したがって、質問は次のように解釈することもでき ます。実稼働環境で、実行時に System.setProperty 呼び出しを実行しているクラスをどのように判断するのですか?