下面附带的代码会产生零星的测试失败(JUnit),可以在80%的时间内运行。 我正在使用静态模板对象。在发生故障的情况下,将不同于预期的JAXB对象置于来自transformer.transform(jaxbSource,result)方法调用的'result'中。JAXP-XSLT零星测试失败
我试过了锁,并且白白地同步了部分。另外模板对象应该根据规范是线程安全的。转换中发生了一些奇怪的事情。
错误症状: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();
}
不知道是什么导致了它。将它标记为“JAXB”并且更清楚地描述“零星测试失败”的症状会很有用,理想情况下提供的数据足以让其他人重现问题。 – 2011-03-11 11:41:47
是的,它与XSL样式表和测试代码的代码很相似.. – 2011-03-11 13:29:47
getCachedJAXBContext()是做什么的?这可能会返回“错误”的内容?在变换之前尝试记录/打印'jaxbSource',以确保您正在改变自己的想法。 – 2011-03-11 13:51:03