@Override public Serializable get() { while (true) { Serializable s = data.get(); if (!(s instanceof ByteArrayWrapper)) { return s; } try { ByteArrayWrapper w = (ByteArrayWrapper) s; ObjectInputStream stream = new PluginClassResolverObjectInputStream(new ByteArrayInputStream(w.getArray())); Object result; try { result = stream.readObject(); } finally { IOUtils.closeQuietly(stream); } Serializable deserialized = (Serializable) result; if (data.compareAndSet(s, deserialized)) { return deserialized; } } catch (IOException e) { return null; } catch (ClassNotFoundException e) { return null; } catch (ClassCastException e) { return null; } } }