failed experiment to use Bean(De)serializerModifier

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

Branch: refs/heads/master
Commit: adb1984a06a82bd4860cc62ac1f3fe204ec28d8a
Parents: a191003
Author: fangzhen <[email protected]>
Authored: Sat Aug 9 23:11:23 2014 +0800
Committer: fangzhen <[email protected]>
Committed: Mon Aug 11 11:10:42 2014 +0800

----------------------------------------------------------------------
 Rakefile                                        | 10 ++---
 .../ode/bpel/obj/serde/JsonOmDeserializer.java  | 40 ++++++++++++++++++--
 .../ode/bpel/obj/serde/JsonOmSerializer.java    | 39 ++++++++++++++++++-
 3 files changed, 80 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/adb1984a/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 21a07bc..c53f7f0 100644
--- a/Rakefile
+++ b/Rakefile
@@ -130,7 +130,7 @@ define "ode" do
     end
 
     test.using :testng, :forkmode=>'perTest', :properties=>{ 
"org.apache.commons.logging.LogFactory" => 
"org.apache.commons.logging.impl.LogFactoryImpl", 
"log4j.configuration"=>"test-log4j.properties", "test.ports" => 
ENV['TEST_PORTS'], "org.apache.ode.scheduler.deleteJobsOnStart" => "true", 
"org.apache.ode.autoRetireProcess"=>"true" } , :java_args=>['-Xdebug', 
'-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=6001', '-Xmx4g', 
'-XX:MaxPermSize=1g']
-    test.with projects("tools"), libs, AXIS2_MODULES.mods, AXIOM, 
JAVAX.servlet, Buildr::Jetty::REQUIRES, HIBERNATE, DOM4J, H2::REQUIRES, 
SPRING_TEST, JACKSON
+    test.with projects("tools", "bpel-obj"), libs, AXIS2_MODULES.mods, AXIOM, 
JAVAX.servlet, Buildr::Jetty::REQUIRES, HIBERNATE, DOM4J, H2::REQUIRES, 
SPRING_TEST, JACKSON
     webapp_dir = "#{test.compile.target}/webapp"
     test.setup task(:prepare_webapp) do |task|
       cp_r _("src/main/webapp"), test.compile.target.to_s
@@ -236,7 +236,7 @@ define "ode" do
          JACKSON, JAVAX.connector
 
 
-    test.with projects("scheduler-simple", "dao-jpa", "dao-hibernate", 
"bpel-epr"),
+    test.with projects("scheduler-simple", "dao-jpa", "dao-hibernate", 
"bpel-epr", "bpel-obj"),
 #         BACKPORT, COMMONS.pool, COMMONS.lang, COMMONS.io, DERBY, 
JAVAX.connector, JAVAX.transaction,
         GERONIMO.transaction, GERONIMO.kernel, GERONIMO.connector, TRANQL, 
HSQLDB, JAVAX.ejb, JAVAX.transaction,
         OPENJPA, XERCES, XALAN, DOM4J, HIBERNATE, SPRING_TEST, JACKSON, DERBY,
@@ -276,7 +276,7 @@ define "ode" do
     compile { open_jpa_enhance }
     resources hibernate_doclet(:package=>"org.apache.ode.store.hib", 
:excludedtags=>"@version,@author,@todo")
 
-    test.with COMMONS.collections, COMMONS.lang, JAVAX.connector, 
JAVAX.transaction, DOM4J, 
+    test.with projects("bpel-obj"), COMMONS.collections, COMMONS.lang, 
JAVAX.connector, JAVAX.transaction, DOM4J, 
       XERCES, XALAN, JAXEN, SAXON, OPENJPA, GERONIMO.transaction, SLF4J, 
SPRING_TEST, DERBY,
       GERONIMO.transaction, GERONIMO.kernel, GERONIMO.connector, 
JAVAX.connector, JAVAX.ejb
     package :jar
@@ -291,7 +291,7 @@ define "ode" do
       SPRING_TEST, COMMONS.codec, SLF4J, LOG4J
 
     test.using :properties=>{ "org.apache.ode.autoRetireProcess"=>"true" }
-    test.with projects("bpel-nobj", "bpel-schemas", "bpel-scripts"),
+    test.with projects("bpel-nobj", "bpel-obj", "bpel-schemas", 
"bpel-scripts"),
       COMMONS.collections, COMMONS.lang, DERBY, JACOB, JAVAX.connector,
       JAVAX.stream, JAVAX.transaction, JAVAX.connector, JAXEN, HSQLDB, SAXON, 
XERCES, XMLBEANS, XALAN, GERONIMO.transaction, SPRING, HIBERNATE, DOM4J, JACKSON
 
@@ -430,7 +430,7 @@ define "ode" do
     end
 
     test.using :properties=>{ "java.naming.factory.initial" => 
"org.apache.xbean.spring.jndi.SpringInitialContextFactory", 
"org.apache.ode.autoRetireProcess"=>"true"}, 
:java_args=>(ENV['TEST_JVM_ARGS']||='').split(' ')
-    test.with projects("dao-jpa", "dao-hibernate", "bpel-compiler", 
"bpel-api-jca", "jca-ra", "jca-server"),
+    test.with projects("dao-jpa", "dao-hibernate", "bpel-compiler", 
"bpel-api-jca", "jca-ra", "jca-server", "bpel-obj"),
       BACKPORT, COMMONS.lang, COMMONS.io, COMMONS.collections, DERBY, 
GERONIMO.connector, GERONIMO.kernel,
       GERONIMO.transaction, JACOB, JAVAX.connector, JAVAX.ejb, 
JAVAX.persistence, JAVAX.stream,
       JAVAX.transaction, JAXEN, JBI, OPENJPA, SAXON, SERVICEMIX, SPRING, 
TRANQL,

http://git-wip-us.apache.org/repos/asf/ode/blob/adb1984a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
index 9081d1d..97d66d0 100644
--- 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmDeserializer.java
@@ -4,6 +4,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.lang.reflect.Field;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Vector;
@@ -14,8 +15,6 @@ import javax.xml.namespace.QName;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.obj.OProcess;
-import org.apache.ode.bpel.obj.migrate.ObjectTraverser;
-import org.apache.ode.bpel.obj.migrate.OmUpgradeVisitor;
 import org.apache.ode.bpel.obj.serde.jacksonhack.TypeBeanSerializerFactory;
 import org.apache.ode.utils.NSContext;
 import org.w3c.dom.Element;
@@ -24,16 +23,22 @@ import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.core.JsonParser;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.JsonToken;
+import com.fasterxml.jackson.core.io.SerializedString;
 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.ObjectMapper;
+import com.fasterxml.jackson.databind.PropertyName;
 import com.fasterxml.jackson.databind.deser.BeanDeserializerModifier;
 import com.fasterxml.jackson.databind.deser.std.StdScalarDeserializer;
+import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
+import com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder;
 import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
 import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
 import com.fasterxml.jackson.module.jaxb.deser.DomElementJsonDeserializer;
+import com.ibm.wsdl.AbstractWSDLElement;
 import com.ibm.wsdl.MessageImpl;
 public class JsonOmDeserializer implements OmDeserializer {
        protected static final Log __log = LogFactory
@@ -77,7 +82,7 @@ public class JsonOmDeserializer implements OmDeserializer {
                        simpleModule.addDeserializer((Class) d,
                                        (JsonDeserializer) 
deserializers.get(d));
                }
-               simpleModule.setDeserializerModifier(new OModelDeserModifier());
+               simpleModule.setDeserializerModifier(new 
WsdlElementDeserModifier());
                simpleModule.addKeyDeserializer(Object.class, new 
KeyAsJsonDeserializer());
                simpleModule.addKeyDeserializer(String.class, new 
KeyAsJsonDeserializer());
                mapper.registerModule(simpleModule);
@@ -236,4 +241,33 @@ public class JsonOmDeserializer implements OmDeserializer {
                
        }
 
+       public static class WsdlElementDeserModifier extends 
BeanDeserializerModifier{
+               public static class MyBeanPropertyWriter extends 
BeanPropertyWriter{
+                       public MyBeanPropertyWriter(BeanPropertyWriter origi, 
String newName){
+                               super(origi, new SerializedString(newName));
+                       }
+               }
+               @Override
+               public List<BeanPropertyDefinition> 
updateProperties(DeserializationConfig config,
+                BeanDescription beanDesc,
+                List<BeanPropertyDefinition> propDefs){
+                       if 
(!AbstractWSDLElement.class.isAssignableFrom(beanDesc.getBeanClass())) {
+                               return propDefs;
+                       }
+                       Iterator<BeanPropertyDefinition> itor = 
propDefs.iterator();
+                       BeanPropertyDefinition modified = null;
+                       while(itor.hasNext()){
+                               BeanPropertyDefinition prop = itor.next();
+                               if 
(prop.getName().equalsIgnoreCase("extensibilityElements")){
+                                       modified = new 
POJOPropertyBuilder((POJOPropertyBuilder)prop, new PropertyName("extElements"));
+                                       itor.remove();
+                                       break;
+                               }
+                       }
+                       if (modified != null){
+                               propDefs.add(modified);
+                       }
+                       return propDefs;
+               }
+       }
 }

http://git-wip-us.apache.org/repos/asf/ode/blob/adb1984a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmSerializer.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmSerializer.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmSerializer.java
index cd01a16..db73328 100644
--- 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmSerializer.java
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/serde/JsonOmSerializer.java
@@ -4,8 +4,8 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.lang.reflect.Field;
 import java.lang.reflect.Type;
-import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Vector;
@@ -23,15 +23,21 @@ import org.w3c.dom.Element;
 import com.fasterxml.jackson.core.JsonFactory;
 import com.fasterxml.jackson.core.JsonGenerationException;
 import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.io.SerializedString;
+import com.fasterxml.jackson.databind.BeanDescription;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.JsonSerializer;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationConfig;
 import com.fasterxml.jackson.databind.SerializationFeature;
 import com.fasterxml.jackson.databind.SerializerProvider;
 import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
 import com.fasterxml.jackson.databind.module.SimpleModule;
+import com.fasterxml.jackson.databind.ser.BeanPropertyWriter;
+import com.fasterxml.jackson.databind.ser.BeanSerializerModifier;
 import com.fasterxml.jackson.databind.ser.std.StdScalarSerializer;
 import com.fasterxml.jackson.module.jaxb.ser.DomElementJsonSerializer;
+import com.ibm.wsdl.AbstractWSDLElement;
 import com.ibm.wsdl.MessageImpl;
 
 
@@ -79,6 +85,7 @@ public class JsonOmSerializer implements OmSerializer {
                }
 
                simpleModule.addKeySerializer(Object.class, new 
KeyAsJsonSerializer());
+               simpleModule.setSerializerModifier(new 
WsdlElementSerModifier());
                mapper.registerModule(simpleModule);
                
                mapper.enable(SerializationFeature.INDENT_OUTPUT);
@@ -204,4 +211,34 @@ public class JsonOmSerializer implements OmSerializer {
                }
                
        }
+
+       public static class WsdlElementSerModifier extends 
BeanSerializerModifier{
+               public static class MyBeanPropertyWriter extends 
BeanPropertyWriter{
+                       public MyBeanPropertyWriter(BeanPropertyWriter origi, 
String newName){
+                               super(origi, new SerializedString(newName));
+                       }
+               }
+               public List<BeanPropertyWriter> 
changeProperties(SerializationConfig config,
+                BeanDescription beanDesc,
+                List<BeanPropertyWriter> beanProperties){
+                       if 
(!AbstractWSDLElement.class.isAssignableFrom(beanDesc.getBeanClass())) {
+                               return beanProperties;
+                       }
+                       Iterator<BeanPropertyWriter> itor = 
beanProperties.iterator();
+                       BeanPropertyWriter modified = null;
+                       while(itor.hasNext()){
+                               BeanPropertyWriter prop = itor.next();
+                               if 
(prop.getName().equalsIgnoreCase("extensibilityElements")){
+                                       modified = new 
MyBeanPropertyWriter(prop, "extElements");
+                                       itor.remove();
+                                       
+                                       break;
+                               }
+                       }
+                       if (modified != null){
+                               beanProperties.add(modified);
+                       }
+                       return beanProperties;
+               }
+       }
 }

Reply via email to