/** Performs tasks to resolve the lazy instantiation. */ private synchronized void init() { if (!initialized) { // Mimic the behavior of XStream's JVM class String vendor = System.getProperty("java.vm.vendor"); float version = 1.3f; try { version = Float.parseFloat(System.getProperty("java.version").substring(0, 3)); } catch (NumberFormatException nfe) { // Keep the default } Class unsafe = null; try { unsafe = Class.forName("sun.misc.Unsafe", false, getClass().getClassLoader()); } catch (ClassNotFoundException cnfe) { // Keep the default } ReflectionProvider reflectionProvider = null; if ((vendor.contains("Sun") || vendor.contains("Oracle") || vendor.contains("Apple") || vendor.contains("Hewlett-Packard") || vendor.contains("IBM") || vendor.contains("Blackdown")) && version >= 1.4f && unsafe != null) { try { reflectionProvider = (ReflectionProvider) Class.forName( "com.thoughtworks.xstream.converters.reflection.Sun14ReflectionProvider", false, getClass().getClassLoader()) .newInstance(); } catch (InstantiationException ie) { reflectionProvider = new PureJavaReflectionProvider(); } catch (IllegalAccessException iae) { reflectionProvider = new PureJavaReflectionProvider(); } catch (ClassNotFoundException cnfe) { reflectionProvider = new PureJavaReflectionProvider(); } } else { reflectionProvider = new PureJavaReflectionProvider(); } HierarchicalStreamDriver driver = new DomDriver(); xs = new XStream(reflectionProvider, driver); xs.setMarshallingStrategy(new LockssReferenceByXPathMarshallingStrategy(lockssContext)); xs.registerConverter(new LockssDateConverter()); initialized = true; } }