Updated Branches:
  refs/heads/master 9c05eb2c3 -> b24164026

refactoring of jacob-specific jackson configuration options into a 
JacksonModule.


Project: http://git-wip-us.apache.org/repos/asf/ode-jacob/repo
Commit: http://git-wip-us.apache.org/repos/asf/ode-jacob/commit/e9db3569
Tree: http://git-wip-us.apache.org/repos/asf/ode-jacob/tree/e9db3569
Diff: http://git-wip-us.apache.org/repos/asf/ode-jacob/diff/e9db3569

Branch: refs/heads/master
Commit: e9db3569390d6c3e7efa526b3b601130705a2b5d
Parents: 9c05eb2
Author: Tammo van Lessen <[email protected]>
Authored: Fri May 3 19:46:12 2013 +0200
Committer: Tammo van Lessen <[email protected]>
Committed: Fri May 3 19:46:12 2013 +0200

----------------------------------------------------------------------
 .../soup/jackson/JacksonExecutionQueueImpl.java    |   56 ---------------
 .../JacobJacksonAnnotationIntrospector.java        |   23 ++++++
 .../apache/ode/jacob/soup/jackson/JacobModule.java |   53 ++++++++++++++
 .../ode/jacob/examples/helloworld/HelloWorld.java  |    9 ++-
 4 files changed, 81 insertions(+), 60 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode-jacob/blob/e9db3569/src/main/java/org/apache/ode/jacob/soup/jackson/JacksonExecutionQueueImpl.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/ode/jacob/soup/jackson/JacksonExecutionQueueImpl.java
 
b/src/main/java/org/apache/ode/jacob/soup/jackson/JacksonExecutionQueueImpl.java
index fb08f10..3658a98 100644
--- 
a/src/main/java/org/apache/ode/jacob/soup/jackson/JacksonExecutionQueueImpl.java
+++ 
b/src/main/java/org/apache/ode/jacob/soup/jackson/JacksonExecutionQueueImpl.java
@@ -26,33 +26,20 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Set;
 
-import org.apache.ode.jacob.Channel;
-import org.apache.ode.jacob.ChannelProxy;
 import org.apache.ode.jacob.soup.Continuation;
 import org.apache.ode.jacob.vpu.ExecutionQueueImpl;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
 import com.fasterxml.jackson.core.JsonGenerationException;
 import com.fasterxml.jackson.core.JsonGenerator;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.JsonToken;
-import com.fasterxml.jackson.core.Version;
-import com.fasterxml.jackson.databind.BeanDescription;
-import com.fasterxml.jackson.databind.DeserializationConfig;
 import com.fasterxml.jackson.databind.DeserializationContext;
-import com.fasterxml.jackson.databind.JsonDeserializer;
-import com.fasterxml.jackson.databind.MapperFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.SerializerProvider;
-import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
 import com.fasterxml.jackson.databind.deser.std.StdDeserializer;
 import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
-import com.fasterxml.jackson.databind.module.SimpleModule;
 import com.fasterxml.jackson.databind.ser.std.StdSerializer;
 
 /**
@@ -67,49 +54,6 @@ public class JacksonExecutionQueueImpl extends 
ExecutionQueueImpl {
                super(null);
        }
        
-    public static void configureMapper(ObjectMapper om) {
-        
-        SimpleModule sm = new SimpleModule("jacob", Version.unknownVersion());
-        
-        final ChannelProxySerializer cps = new ChannelProxySerializer();
-        
-        sm.addSerializer(ChannelProxy.class, cps);
-        sm.addSerializer(Continuation.class, new ContinuationSerializer());
-        sm.addSerializer(JacksonExecutionQueueImpl.class, new 
ExecutionQueueImplSerializer(cps));
-        sm.addDeserializer(JacksonExecutionQueueImpl.class, new 
ExecutionQueueImplDeserializer());
-        sm.addDeserializer(Continuation.class, new ContinuationDeserializer());
-        sm.addDeserializer(Channel.class, new ChannelProxyDeserializer());
-        
-        sm.setDeserializerModifier(new BeanDeserializerModifier() {
-
-            public JsonDeserializer<?> modifyDeserializer(
-                    DeserializationConfig config, BeanDescription beanDesc,
-                    JsonDeserializer<?> deserializer) {
-                
-                // use channel proxy deserializer for channels.
-                if (Channel.class.isAssignableFrom(beanDesc.getBeanClass()) && 
beanDesc.getBeanClass().isInterface()) {
-                    return new ChannelProxyDeserializer();
-                }
-
-                return super.modifyDeserializer(config, beanDesc, 
deserializer);
-            }
-        });
-        
-        om.registerModule(sm);
-        om.disable(MapperFeature.AUTO_DETECT_CREATORS);
-        om.disable(MapperFeature.AUTO_DETECT_GETTERS);
-        om.disable(MapperFeature.AUTO_DETECT_IS_GETTERS);
-        om.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);
-        
-        om.setDefaultTyping(new JacobTypeResolverBuilder());
-        om.setAnnotationIntrospector(new JacobJacksonAnnotationIntrospector());
-        
-        om.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
-        om.enable(SerializationFeature.WRITE_ENUMS_USING_INDEX);
-        //om.enable(SerializationFeature.INDENT_OUTPUT);
-    }
-
-       
     public static class ExecutionQueueImplSerializer extends 
StdSerializer<JacksonExecutionQueueImpl> {
 
         private ChannelProxySerializer channelProxySerializer;

http://git-wip-us.apache.org/repos/asf/ode-jacob/blob/e9db3569/src/main/java/org/apache/ode/jacob/soup/jackson/JacobJacksonAnnotationIntrospector.java
----------------------------------------------------------------------
diff --git 
a/src/main/java/org/apache/ode/jacob/soup/jackson/JacobJacksonAnnotationIntrospector.java
 
b/src/main/java/org/apache/ode/jacob/soup/jackson/JacobJacksonAnnotationIntrospector.java
index ba8b7b1..f3c16b6 100644
--- 
a/src/main/java/org/apache/ode/jacob/soup/jackson/JacobJacksonAnnotationIntrospector.java
+++ 
b/src/main/java/org/apache/ode/jacob/soup/jackson/JacobJacksonAnnotationIntrospector.java
@@ -1,14 +1,22 @@
 package org.apache.ode.jacob.soup.jackson;
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
 import com.fasterxml.jackson.annotation.ObjectIdGenerators;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.cfg.MapperConfig;
 import com.fasterxml.jackson.databind.introspect.Annotated;
+import com.fasterxml.jackson.databind.introspect.AnnotatedClass;
 import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
 import com.fasterxml.jackson.databind.introspect.ObjectIdInfo;
+import com.fasterxml.jackson.databind.introspect.VisibilityChecker;
+import com.fasterxml.jackson.databind.jsontype.TypeResolverBuilder;
 
 public class JacobJacksonAnnotationIntrospector extends
         JacksonAnnotationIntrospector {
 
     private static final long serialVersionUID = 1L;
+    private TypeResolverBuilder<?> jacobTypeResolver = new 
JacobTypeResolverBuilder();
 
     /* enable object ids for all objects. */
     @Override
@@ -16,4 +24,19 @@ public class JacobJacksonAnnotationIntrospector extends
         return new ObjectIdInfo("@id", Object.class, 
ObjectIdGenerators.IntSequenceGenerator.class);
     }
 
+    /* use custom type resolver */
+    @Override
+    public TypeResolverBuilder<?> findTypeResolver(MapperConfig<?> config,
+            AnnotatedClass ac, JavaType baseType) {
+        return jacobTypeResolver;
+    }
+
+    /* disable creator visibility */
+    // TODO: Check if there is a better way to only serialize non-transient 
fields.
+    @Override
+    public VisibilityChecker<?> findAutoDetectVisibility(AnnotatedClass ac,
+            VisibilityChecker<?> checker) {
+        return 
VisibilityChecker.Std.defaultInstance().with(Visibility.NONE).withVisibility(PropertyAccessor.FIELD,
 Visibility.ANY);
+    }
+    
 }

http://git-wip-us.apache.org/repos/asf/ode-jacob/blob/e9db3569/src/main/java/org/apache/ode/jacob/soup/jackson/JacobModule.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/ode/jacob/soup/jackson/JacobModule.java 
b/src/main/java/org/apache/ode/jacob/soup/jackson/JacobModule.java
new file mode 100644
index 0000000..52c3541
--- /dev/null
+++ b/src/main/java/org/apache/ode/jacob/soup/jackson/JacobModule.java
@@ -0,0 +1,53 @@
+package org.apache.ode.jacob.soup.jackson;
+
+import org.apache.ode.jacob.Channel;
+import org.apache.ode.jacob.ChannelProxy;
+import org.apache.ode.jacob.soup.Continuation;
+import 
org.apache.ode.jacob.soup.jackson.JacksonExecutionQueueImpl.ExecutionQueueImplDeserializer;
+import 
org.apache.ode.jacob.soup.jackson.JacksonExecutionQueueImpl.ExecutionQueueImplSerializer;
+
+import com.fasterxml.jackson.core.Version;
+import com.fasterxml.jackson.databind.BeanDescription;
+import com.fasterxml.jackson.databind.DeserializationConfig;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+
+public class JacobModule extends SimpleModule {
+
+    private static final long serialVersionUID = 1L;
+
+    public JacobModule() {
+        super("jacob-module", Version.unknownVersion());
+        
+        final ChannelProxySerializer cps = new ChannelProxySerializer();
+        addSerializer(ChannelProxy.class, cps);
+        addSerializer(Continuation.class, new ContinuationSerializer());
+        addSerializer(JacksonExecutionQueueImpl.class, new 
ExecutionQueueImplSerializer(cps));
+        addDeserializer(JacksonExecutionQueueImpl.class, new 
ExecutionQueueImplDeserializer());
+        addDeserializer(Continuation.class, new ContinuationDeserializer());
+        addDeserializer(Channel.class, new ChannelProxyDeserializer());
+        
+        setDeserializerModifier(new BeanDeserializerModifier() {
+
+            public JsonDeserializer<?> modifyDeserializer(
+                    DeserializationConfig config, BeanDescription beanDesc,
+                    JsonDeserializer<?> deserializer) {
+                
+                // use channel proxy deserializer for channels.
+                if (Channel.class.isAssignableFrom(beanDesc.getBeanClass()) && 
beanDesc.getBeanClass().isInterface()) {
+                    return new ChannelProxyDeserializer();
+                }
+
+                return super.modifyDeserializer(config, beanDesc, 
deserializer);
+            }
+        });
+    }
+    
+    @Override
+    public void setupModule(SetupContext context) {
+        context.appendAnnotationIntrospector(new 
JacobJacksonAnnotationIntrospector());
+        super.setupModule(context);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ode-jacob/blob/e9db3569/src/test/java/org/apache/ode/jacob/examples/helloworld/HelloWorld.java
----------------------------------------------------------------------
diff --git 
a/src/test/java/org/apache/ode/jacob/examples/helloworld/HelloWorld.java 
b/src/test/java/org/apache/ode/jacob/examples/helloworld/HelloWorld.java
index 053d049..ece6ca8 100644
--- a/src/test/java/org/apache/ode/jacob/examples/helloworld/HelloWorld.java
+++ b/src/test/java/org/apache/ode/jacob/examples/helloworld/HelloWorld.java
@@ -25,13 +25,14 @@ import org.apache.ode.jacob.Synch;
 import org.apache.ode.jacob.Val;
 import org.apache.ode.jacob.examples.sequence.Sequence;
 import org.apache.ode.jacob.soup.jackson.JacksonExecutionQueueImpl;
+import org.apache.ode.jacob.soup.jackson.JacobModule;
 import org.apache.ode.jacob.vpu.JacobVPU;
 
 import com.fasterxml.jackson.annotation.JsonCreator;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.dataformat.smile.SmileFactory;
-import com.fasterxml.jackson.dataformat.smile.SmileGenerator;
 
 /**
  * Simple Hello World example to showcase different
@@ -264,9 +265,9 @@ public class HelloWorld extends JacobRunnable {
         // sf.enable(SmileGenerator.Feature.ENCODE_BINARY_AS_7BIT);
         
         ObjectMapper mapper = new ObjectMapper(sf); 
+        mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
         
-        
-        JacksonExecutionQueueImpl.configureMapper(mapper);
+        mapper.registerModule(new JacobModule());
 
         JacobVPU vpu = new JacobVPU();
         JacksonExecutionQueueImpl queue = new JacksonExecutionQueueImpl();
@@ -287,7 +288,7 @@ public class HelloWorld extends JacobRunnable {
     public static JacksonExecutionQueueImpl loadAndRestoreQueue(ObjectMapper 
mapper, JacksonExecutionQueueImpl in) throws Exception {
         byte[] json = mapper.writeValueAsBytes(in);
         // print json
-        //System.out.println(new String(json));
+        System.out.println(new String(json));
         JacksonExecutionQueueImpl q2 = mapper.readValue(json, 
JacksonExecutionQueueImpl.class);
         return q2;
     }

Reply via email to