@Override @SuppressWarnings({"unchecked", "rawtypes"}) public void load(Object serialized) { if (!(serialized instanceof Map<?, ?>)) throw new IllegalArgumentException(""); Map<String, String[]> data = (Map<String, String[]>) serialized; for (Entry<String, String[]> entry : data.entrySet()) { String[] args = entry.getValue(); MutableValue<?> value; if (args.length == 3) { try { Class<?> type = Class.forName(args[1]); value = new MutableValueImpl( type, SerializationUtils.deserialize(args[2]), conversionService); } catch (Exception e) { value = new MutableValueImpl<>(String.class, args[0], conversionService); } } else { value = new MutableValueImpl<>(String.class, args[0], conversionService); } synchronized (values) { values.put(entry.getKey(), value); } } }
@Override public Object serialize() { Map<String, String[]> serialized = new HashMap<>(); for (Entry<String, MutableValue<?>> entry : values.entrySet()) { MutableValue<?> valueHolder = entry.getValue(); Object value = valueHolder.getValue(); String[] parts; try { parts = new String[] { String.valueOf(value), valueHolder.getType().getName(), SerializationUtils.serializeBase64(value) }; } catch (Exception e) { parts = new String[] {String.valueOf(value)}; } serialized.put(entry.getKey(), parts); } return serialized; }