diff --git a/pom.xml b/pom.xml index e67450207..c7576933e 100644 --- a/pom.xml +++ b/pom.xml @@ -67,9 +67,9 @@ - true - xstream + com.thoughtworks.xstream xstream + 1.4.7 diff --git a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java index 4864b0664..5a0e33136 100755 --- a/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java +++ b/src/main/java/net/openhft/chronicle/map/ChronicleMapBuilder.java @@ -18,6 +18,8 @@ package net.openhft.chronicle.map; +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.converters.reflection.SunLimitedUnsafeReflectionProvider; import net.openhft.chronicle.hash.*; import net.openhft.chronicle.hash.replication.*; import net.openhft.chronicle.hash.serialization.*; @@ -412,7 +414,7 @@ public final class ChronicleMapBuilder implements Cloneable, return this; } - public List jsonConverters() { + List jsonConverters() { return this.jsonConverters; } @@ -1330,13 +1332,12 @@ public final class ChronicleMapBuilder implements Cloneable, if (file.exists() && file.length() > 0) { try (FileInputStream fis = new FileInputStream(file); ObjectInputStream ois = new ObjectInputStream(fis)) { + XStream xStream = new XStream(new SunLimitedUnsafeReflectionProvider()); VanillaChronicleMap map = - (VanillaChronicleMap) ois.readObject(); + (VanillaChronicleMap) xStream.fromXML(ois); map.headerSize = roundUpMapHeaderSize(fis.getChannel().position()); map.createMappedStoreAndSegments(file); return establishReplication(map, singleHashReplication, channel); - } catch (ClassNotFoundException e) { - throw new IOException(e); } } if (file.createNewFile() || file.length() == 0) { @@ -1356,7 +1357,8 @@ public final class ChronicleMapBuilder implements Cloneable, try (FileOutputStream fos = new FileOutputStream(file); ObjectOutputStream oos = new ObjectOutputStream(fos)) { - oos.writeObject(map); + XStream xStream = new XStream(new SunLimitedUnsafeReflectionProvider()); + xStream.toXML(map, oos); oos.flush(); map.headerSize = roundUpMapHeaderSize(fos.getChannel().position()); map.createMappedStoreAndSegments(file); diff --git a/src/main/java/net/openhft/xstreem/converters/AbstractChronicleMapConverter.java b/src/main/java/net/openhft/xstreem/converters/AbstractChronicleMapConverter.java index 17869e922..ee18b3c44 100644 --- a/src/main/java/net/openhft/xstreem/converters/AbstractChronicleMapConverter.java +++ b/src/main/java/net/openhft/xstreem/converters/AbstractChronicleMapConverter.java @@ -77,7 +77,9 @@ public class AbstractChronicleMapConverter implements Converter { @Override public Object unmarshal(HierarchicalStreamReader reader, UnmarshallingContext context) { - + reader.moveDown(); + if (!"cmap".equals(reader.getNodeName())) + throw new ConversionException("root node should be cmap, was " + reader.getNodeName()); while (reader.hasMoreChildren()) { reader.moveDown(); @@ -102,7 +104,7 @@ public class AbstractChronicleMapConverter implements Converter { reader.moveUp(); } - + reader.moveUp(); return null; }