以下に添付されているコードは、散発的なテスト失敗(JUnit)を生成し、80%の時間で機能します。静的テンプレートオブジェクトを使用しています。失敗した場合、予想とは異なるJAXBオブジェクトがtransformer.transform(jaxbSource、result)メソッド呼び出しからの「result」に配置されます。
私は無駄にセクションをロックして同期しようとしました。また、Templatesオブジェクトは、仕様に従ってスレッドセーフであると想定されています。変換中に何か奇妙なことが起こっています。
エラー症状:JUnitテストの失敗-突然、間違ったオブジェクトが変換から返されます。
何か案は?
private <S, T> S transform(final Templates template, final Class resultClass, final T data) throws JAXBException, TransformerException {
Transformer transformer = template.newTransformer();
final JAXBSource jaxbSource = new JAXBSource(getCachedJAXBContext(data.getClass()), data);
final Result result = new JAXBResult(getCachedJAXBContext(resultClass));
transformer.transform(jaxbSource, result);
return (S) ((JAXBResult) result).getResult();
}