На самом деле я хочу только один экземпляр XStream. Поэтому у меня есть класс ниже:Java xStream processAnnotations concurrency
public class XSteamTool{
private static XStream xStream = new XStream();
static{
xStream.ignoreUnknownElements();
xStream.registerConverter(new DateConverter(TimeZone.getDefault()));
}
public static String objToXml(Object obj){
xStream.processAnnotations(obj.getClass());
return xStream.toXML(obj);
}
public static <T> T xmlToObj(String xmlString, Class<T> clazz){
xStream.processAnnotations(clazz);
return(T)xStream.fromXML(xmlString);
}
}
Но эта проблема возникает в многопоточной среде. Я нашел примечание в официальном документе: XStream не является потокобезопасным, пока он настроен. К сожалению аннотации является определение изменения в конфигурации, которая в настоящее время используется во время объекта сортировочного обрабатываются
я пытаюсь синхронизировать до processAnnotations и что выглядит отлично:
public static String objToXml(Object obj){
synchronized (obj.getClass()) {
xStream.processAnnotations(obj.getClass());
}
return xStream.toXML(obj);
}
public static <T> T xmlToObj(String xmlString, Class<T> clazz){
synchronized (clazz) {
xStream.processAnnotations(clazz);
}
return(T)xStream.fromXML(xmlString);
}
Интересно, если использовать правильно , Любые предложения приветствуются.
Спасибо. Но дело не только в синглетоне. – bluearrow