私はJavaでXerces2を使用しており、XMLGrammarCachingConfigurationを持っています。parseGrammarを呼び出して、XMLスキーマ(xsd)を文法プールに解析するために使用しています。xsdファイルを正常に解析しますが、すべてのエラーと警告をstderrに報告します(私はEclipseを使用しているため、これはコンソールにキャプチャされます)。致命的なエラーが発生するようにxsdを変更したところ、予想どおり、アプリケーションがキャッチできるXNIExceptionがスローされました。
XMLGrammarCachingConfiguration.setErrorHandler()メソッドを使用して、自分のPrintWriterで作成したDefaultErrorHandlerを渡してみました。また、XMLErrorHandlerインターフェイスを実装する独自のカスタムエラーハンドラーを渡してみました。それでも、PrintWriterが使用しているファイルではなく、コンソールに表示されます。
これはとても単純なはずのようです。誰かが私が間違っていることを教えてもらえますか?
--編集:カスタムXMLEntityResolverを使用していることを追加する必要があります。キャプチャするエラーメッセージは、リゾルバーがエンティティを解決できない場合であり、resolveEntity()メソッドからnullを返します。デフォルトのエンティティリゾルバはそれを解決しようとしています。つまり、エラーメッセージは、基になるデフォルトのエンティティリゾルバから送信されます。