Поскольку, как упоминалось @VivaceVivo, DataFactory.newInstance () является дорогостоящим и подразумевает, что он не гарантирует многопоточность, рассмотрите возможность использования ThreadLocal:
final private static ThreadLocal<DatatypeFactory> datatypeFactoryHolder = new ThreadLocal<DatatypeFactory>()
{
@Override
protected DatatypeFactory initialValue()
{
try
{
return DatatypeFactory.newInstance();
} catch (DatatypeConfigurationException e)
{
throw new IllegalStateException("failed to create " + DatatypeFactory.class.getSimpleName(), e);
}
}
};
public static XMLGregorianCalendar dateToXMLGregorianCalendar(Date date)
{
GregorianCalendar c = new GregorianCalendar();
c.setTime(date);
return datatypeFactoryHolder.get().newXMLGregorianCalendar(c);
}
}
.. до тех пор, пока вам все равно, сохранят ли потоки дополнительный объект или имеют способ очистки ThreadLocalMap при необходимости