下面附加的代码会产生零星的测试失败 (JUnit),在 80% 的时间里都可以正常工作。我正在使用静态模板对象。在失败的情况下,一个与预期不同的 JAXB 对象被放入来自 transformer.transform(jaxbSource, result) 方法调用的“结果”中。
我试过锁和同步部分是徒劳的。根据规范,模板对象也应该是线程安全的。转换中发生了一些奇怪的事情。
错误症状: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();
}