smile serialization worked.
Project: http://git-wip-us.apache.org/repos/asf/ode/repo Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/9e133873 Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/9e133873 Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/9e133873 Branch: refs/heads/master Commit: 9e1338737eef8528334739f7ca50150c11294fc1 Parents: c6c985e Author: fangzhen <[email protected]> Authored: Sun Aug 3 00:40:58 2014 +0800 Committer: fangzhen <[email protected]> Committed: Sun Aug 3 00:40:58 2014 +0800 ---------------------------------------------------------------------- .../ode/bpel/compiler_2_0/GoodCompileTest.java | 11 +--- .../compiler_2_0/JavaSerializationTest.java | 57 ++++++++++++++++++++ .../compiler_2_0/JsonSerializationTest.java | 10 ++++ .../bpel/compiler_2_0/SerializationTest.java | 49 ----------------- .../compiler_2_0/SmileSerializationTest.java | 11 ++++ .../org/apache/ode/bpel/obj/ExtensibleImpl.java | 5 +- .../obj/migrate/ExtensibeImplEqualityComp.java | 2 - .../ode/bpel/obj/serde/OmSerdeFactory.java | 2 +- .../jacksonhack/UniqueStringIdGenerator.java | 56 +++++++++++++++++++ .../bpel/obj/serde/jacksonhack/JacksonTest.java | 38 +++++++++++-- 10 files changed, 172 insertions(+), 69 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ode/blob/9e133873/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java index 2602642..9a1d973 100644 --- a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java +++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/GoodCompileTest.java @@ -50,18 +50,9 @@ public class GoodCompileTest extends AbstractCompileTestCase implements String cbpPath = bpelPath.substring(0, bpelPath.lastIndexOf(".")) + ".cbp"; _compiler.serializeOProcess(origi, cbpPath); - - DeSerializer deserializer = new DeSerializer(new FileInputStream(cbpPath)); - OProcess desered = deserializer.deserialize(); - - DeepEqualityHelper de = new DeepEqualityHelper(); - de.addCustomComparator(new ExtensibeImplEqualityComp()); - de.addCustomComparator(new DomElementComparator()); - boolean res = de.deepEquals(origi, desered); - assertEquals(Boolean.TRUE, res); } catch (Exception ex) { ex.printStackTrace(); - Assert.fail("Compilation or deserialization did not succeed."); + Assert.fail("Compilation did not succeed."); } } http://git-wip-us.apache.org/repos/asf/ode/blob/9e133873/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JavaSerializationTest.java ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JavaSerializationTest.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JavaSerializationTest.java new file mode 100644 index 0000000..a0c1126 --- /dev/null +++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JavaSerializationTest.java @@ -0,0 +1,57 @@ +package org.apache.ode.bpel.compiler_2_0; + +import static org.junit.Assert.assertEquals; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.net.URI; +import java.net.URL; + +import org.apache.ode.bpel.obj.OProcess; +import org.apache.ode.bpel.obj.migrate.DeepEqualityHelper; +import org.apache.ode.bpel.obj.migrate.DomElementComparator; +import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp; +import org.apache.ode.bpel.obj.serde.DeSerializer; +import org.apache.ode.bpel.obj.serde.OmSerdeFactory; +import org.apache.ode.bpel.obj.serde.OmSerdeFactory.SerializeFormat; +import org.junit.Assert; + +public class JavaSerializationTest extends GoodCompileTest{ + protected SerializeFormat format; + protected String pathSuffix; + + public JavaSerializationTest(){ + this.format = OmSerdeFactory.SerializeFormat.FORMAT_SERIALIZED_JAVA; + this.pathSuffix = "java"; + } + public void runTest(String bpel) throws Exception { + try { + Class testClass = getClass(); + URL url = testClass.getResource(bpel); + URI uri = url.toURI(); + String path = uri.getPath(); + File bpelFile = new File(path); + OProcess origi = _compiler.compile2OProcess(bpelFile, 0); + String bpelPath = bpelFile.getAbsolutePath(); + String cbpPath = bpelPath.substring(0, bpelPath.lastIndexOf(".")) + + "." + pathSuffix + ".cbp"; + DeSerializer serializer = new DeSerializer(); + serializer.serialize(new FileOutputStream(cbpPath), + origi, format); + + DeSerializer deserializer = new DeSerializer(new FileInputStream(cbpPath)); + OProcess desered = deserializer.deserialize(); + + DeepEqualityHelper de = new DeepEqualityHelper(); + de.addCustomComparator(new ExtensibeImplEqualityComp()); + de.addCustomComparator(new DomElementComparator()); + boolean res = de.deepEquals(origi, desered); + assertEquals(Boolean.TRUE, res); + } catch (Exception ex) { + ex.printStackTrace(); + Assert.fail("Compilation or deserialization did not succeed."); + } + } + +} http://git-wip-us.apache.org/repos/asf/ode/blob/9e133873/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JsonSerializationTest.java ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JsonSerializationTest.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JsonSerializationTest.java new file mode 100644 index 0000000..dbdfe84 --- /dev/null +++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/JsonSerializationTest.java @@ -0,0 +1,10 @@ +package org.apache.ode.bpel.compiler_2_0; + +import org.apache.ode.bpel.obj.serde.OmSerdeFactory; + +public class JsonSerializationTest extends JavaSerializationTest{ + public JsonSerializationTest(){ + this.format = OmSerdeFactory.SerializeFormat.FORMAT_SERIALIZED_JSON; + this.pathSuffix = "json"; + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/9e133873/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/SerializationTest.java ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/SerializationTest.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/SerializationTest.java deleted file mode 100644 index 22df441..0000000 --- a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/SerializationTest.java +++ /dev/null @@ -1,49 +0,0 @@ -package org.apache.ode.bpel.compiler_2_0; - -import static org.junit.Assert.assertEquals; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.net.URI; -import java.net.URL; - -import org.apache.ode.bpel.obj.OProcess; -import org.apache.ode.bpel.obj.migrate.DeepEqualityHelper; -import org.apache.ode.bpel.obj.migrate.DomElementComparator; -import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp; -import org.apache.ode.bpel.obj.serde.DeSerializer; -import org.apache.ode.bpel.obj.serde.OmSerdeFactory; -import org.junit.Assert; - -public class SerializationTest extends GoodCompileTest{ - public void runTest(String bpel) throws Exception { - try { - Class testClass = getClass(); - URL url = testClass.getResource(bpel); - URI uri = url.toURI(); - String path = uri.getPath(); - File bpelFile = new File(path); - OProcess origi = _compiler.compile2OProcess(bpelFile, 0); - String bpelPath = bpelFile.getAbsolutePath(); - String cbpPath = bpelPath.substring(0, bpelPath.lastIndexOf(".")) - + ".json.cbp"; - DeSerializer serializer = new DeSerializer(); - serializer.serialize(new FileOutputStream(cbpPath), - origi, OmSerdeFactory.SerializeFormat.FORMAT_SERIALIZED_JSON); - - DeSerializer deserializer = new DeSerializer(new FileInputStream(cbpPath)); - OProcess desered = deserializer.deserialize(); - - DeepEqualityHelper de = new DeepEqualityHelper(); - de.addCustomComparator(new ExtensibeImplEqualityComp()); - de.addCustomComparator(new DomElementComparator()); - boolean res = de.deepEquals(origi, desered); - assertEquals(Boolean.TRUE, res); - } catch (Exception ex) { - ex.printStackTrace(); - Assert.fail("Compilation or deserialization did not succeed."); - } - } - -} http://git-wip-us.apache.org/repos/asf/ode/blob/9e133873/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/SmileSerializationTest.java ---------------------------------------------------------------------- diff --git a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/SmileSerializationTest.java b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/SmileSerializationTest.java new file mode 100644 index 0000000..47de594 --- /dev/null +++ b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/SmileSerializationTest.java @@ -0,0 +1,11 @@ +package org.apache.ode.bpel.compiler_2_0; + +import org.apache.ode.bpel.obj.serde.OmSerdeFactory; + +public class SmileSerializationTest extends JavaSerializationTest{ + public SmileSerializationTest(){ + this.format = OmSerdeFactory.SerializeFormat.FORMAT_SERIALIZED_SMILE; + this.pathSuffix = "smile"; + + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/9e133873/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java index e608fcb..2979340 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/ExtensibleImpl.java @@ -7,11 +7,12 @@ import java.io.Serializable; import java.util.LinkedHashMap; import java.util.Map; +import org.apache.ode.bpel.obj.serde.jacksonhack.UniqueStringIdGenerator; + import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.ObjectIdGenerators; -@JsonIdentityInfo(generator = ObjectIdGenerators.UUIDGenerator.class, property = "@id") +@JsonIdentityInfo(generator = UniqueStringIdGenerator.class, property = "@id") public class ExtensibleImpl implements Extensible<Object>, Serializable{ public static final long serialVersionUID = -1L; protected static final int CURRENT_CLASS_VERSION = 1; http://git-wip-us.apache.org/repos/asf/ode/blob/9e133873/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java index 56cebc2..e0be0d1 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java @@ -6,8 +6,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; -import javax.print.attribute.standard.MediaSize.Other; - import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ode.bpel.obj.DebugInfo; http://git-wip-us.apache.org/repos/asf/ode/blob/9e133873/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/OmSerdeFactory.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/OmSerdeFactory.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/OmSerdeFactory.java index 3cdd955..869b055 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/OmSerdeFactory.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/OmSerdeFactory.java @@ -6,7 +6,7 @@ import java.io.OutputStream; import org.apache.ode.bpel.obj.OProcess; public class OmSerdeFactory { - public static final SerializeFormat FORMAT_SERIALIZED_DEFAULT = SerializeFormat.FORMAT_SERIALIZED_JAVA; + public static final SerializeFormat FORMAT_SERIALIZED_DEFAULT = SerializeFormat.FORMAT_SERIALIZED_SMILE; private SerializeFormat format = FORMAT_SERIALIZED_DEFAULT; http://git-wip-us.apache.org/repos/asf/ode/blob/9e133873/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/jacksonhack/UniqueStringIdGenerator.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/jacksonhack/UniqueStringIdGenerator.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/jacksonhack/UniqueStringIdGenerator.java new file mode 100644 index 0000000..cef3e30 --- /dev/null +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/jacksonhack/UniqueStringIdGenerator.java @@ -0,0 +1,56 @@ +package org.apache.ode.bpel.obj.serde.jacksonhack; + +import java.util.UUID; + +import com.fasterxml.jackson.annotation.ObjectIdGenerator; + +/** + * Copied from jackson {@link com.fasterxml.jackson.annotation.ObjectIdGenerators.UUIDGenerator} + * and changed id type from UUID to String + */ +public class UniqueStringIdGenerator extends ObjectIdGenerator<String>{ + private static final long serialVersionUID = 1L; + protected final Class<?> _scope; + public UniqueStringIdGenerator() { this(Object.class); } + private UniqueStringIdGenerator(Class<?> scope) { + _scope = scope; + } + + /** + * Can just return base instance since this is essentially scopeless + */ + @Override + public ObjectIdGenerator<String> forScope(Class<?> scope) { + return this; + } + + /** + * Can just return base instance since this is essentially scopeless + */ + @Override + public ObjectIdGenerator<String> newForSerialization(Object context) { + return this; + } + + @Override + public String generateId(Object forPojo) { + return UUID.randomUUID().toString(); + } + + @Override + public IdKey key(Object key) { + return new IdKey(getClass(), null, key); + } + + /** + * Since UUIDs are always unique, let's fully ignore scope definition + */ + @Override + public boolean canUseFor(ObjectIdGenerator<?> gen) { + return (gen.getClass() == getClass()); + } + @Override + public Class<?> getScope() { + return _scope; + } +} http://git-wip-us.apache.org/repos/asf/ode/blob/9e133873/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/serde/jacksonhack/JacksonTest.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/serde/jacksonhack/JacksonTest.java b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/serde/jacksonhack/JacksonTest.java index ae92799..afa4b78 100644 --- a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/serde/jacksonhack/JacksonTest.java +++ b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/serde/jacksonhack/JacksonTest.java @@ -5,7 +5,9 @@ import static org.junit.Assert.assertEquals; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.util.ArrayList; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import javax.xml.namespace.QName; @@ -14,7 +16,6 @@ import org.apache.ode.bpel.obj.serde.KeyAsJsonDeserializer; import org.apache.ode.bpel.obj.serde.KeyAsJsonSerializer; import org.junit.Test; -import com.fasterxml.jackson.annotation.JsonAnyGetter; import com.fasterxml.jackson.annotation.JsonIdentityInfo; import com.fasterxml.jackson.annotation.ObjectIdGenerators; import com.fasterxml.jackson.core.JsonGenerationException; @@ -24,6 +25,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import com.fasterxml.jackson.databind.annotation.JsonSerialize; +import com.fasterxml.jackson.dataformat.smile.SmileFactory; public class JacksonTest { /** @@ -53,14 +55,14 @@ public class JacksonTest { A a2 = b; map.put("i5", b); map.put("i6", a2); - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper = new ObjectMapper(new SmileFactory()); mapper.setSerializerFactory(TypeBeanSerializerFactory.instance); mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); mapper.enable(SerializationFeature.INDENT_OUTPUT); ByteArrayOutputStream os = new ByteArrayOutputStream(); mapper.writeValue(os, map); ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray()); - ObjectMapper m2 = new ObjectMapper(); + ObjectMapper m2 = new ObjectMapper(new SmileFactory()); m2.setSerializerFactory(TypeBeanSerializerFactory.instance); m2.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); @SuppressWarnings("rawtypes") @@ -111,7 +113,7 @@ public class JacksonTest { } @Test public void testMapTypeInfo() throws JsonParseException, JsonMappingException, IOException{ - ObjectMapper mapper = new ObjectMapper(); + ObjectMapper mapper = new ObjectMapper(new SmileFactory()); mapper.setSerializerFactory(TypeBeanSerializerFactory.instance); mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); mapper.enable(SerializationFeature.INDENT_OUTPUT); @@ -123,11 +125,37 @@ public class JacksonTest { mapper.writeValue(os, c); ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray()); - ObjectMapper m2 = new ObjectMapper(); + ObjectMapper m2 = new ObjectMapper(new SmileFactory()); m2.setSerializerFactory(TypeBeanSerializerFactory.instance); m2.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); C de = m2.readValue(is, C.class); assertEquals(c.map, de.map); } + + @JsonIdentityInfo(generator = UniqueStringIdGenerator.class, property = "@id") + public static class D{ + public D next; + } + @Test + public void testSmileFormat() throws JsonGenerationException, JsonMappingException, IOException{ + ObjectMapper mapper = new ObjectMapper(new SmileFactory()); + D d = new D(); + d.next = d; + + mapper.setSerializerFactory(TypeBeanSerializerFactory.instance); + mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + mapper.enable(SerializationFeature.INDENT_OUTPUT); + ByteArrayOutputStream os = new ByteArrayOutputStream(); + mapper.writeValue(os, d); + + ByteArrayInputStream is = new ByteArrayInputStream(os.toByteArray()); + ObjectMapper m2 = new ObjectMapper(new SmileFactory()); + m2.setSerializerFactory(TypeBeanSerializerFactory.instance); + m2.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + + D de = m2.readValue(is, D.class); + assertEquals(D.class, de.next.getClass()); + + } }
