migration and deep equality code. not working properly though

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

Branch: refs/heads/master
Commit: cc9eab25ea18c8c9382402c9b8ecfce6313f3c39
Parents: c18fa9f
Author: fangzhen <[email protected]>
Authored: Mon Jul 28 13:55:39 2014 +0800
Committer: fangzhen <[email protected]>
Committed: Mon Jul 28 13:55:39 2014 +0800

----------------------------------------------------------------------
 Rakefile                                        |   5 +-
 .../ode/bpel/compiler_2_0/MigrationTest.java    |  52 +++++
 .../src/test/resources/log4j.properties         |   5 +-
 .../2.0/good/AsyncProcess/AsyncProcess2.cbp     | Bin 0 -> 47691 bytes
 .../oldcbp/2.0/good/assign/Assign1-2.0.cbp      | Bin 0 -> 32938 bytes
 .../oldcbp/2.0/good/assign/Assign2-2.0.cbp      | Bin 0 -> 33547 bytes
 .../oldcbp/2.0/good/assign/Assign3-2.0.cbp      | Bin 0 -> 37042 bytes
 .../oldcbp/2.0/good/assign/Assign5-2.0.cbp      | Bin 0 -> 32619 bytes
 .../oldcbp/2.0/good/assign/Assign6-2.0.cbp      | Bin 0 -> 32572 bytes
 .../oldcbp/2.0/good/assign/Assign7-2.0.cbp      | Bin 0 -> 31372 bytes
 .../oldcbp/2.0/good/assign/Assign8-2.0.cbp      | Bin 0 -> 31140 bytes
 .../oldcbp/2.0/good/assign/Assign9-2.0.cbp      | Bin 0 -> 29510 bytes
 .../circularReference/CircularReference.cbp     | Bin 0 -> 15596 bytes
 .../oldcbp/2.0/good/compensation/comp1-2.0.cbp  | Bin 0 -> 40085 bytes
 .../oldcbp/2.0/good/compensation/comp2-2.0.cbp  | Bin 0 -> 39765 bytes
 .../oldcbp/2.0/good/flow/flow2-2.0.cbp          | Bin 0 -> 20248 bytes
 .../oldcbp/2.0/good/flow/flow3-2.0.cbp          | Bin 0 -> 23864 bytes
 .../oldcbp/2.0/good/flow/flow4-2.0.cbp          | Bin 0 -> 20767 bytes
 .../oldcbp/2.0/good/flow/flow5-2.0.cbp          | Bin 0 -> 23015 bytes
 .../oldcbp/2.0/good/flow/flow6-2.0.cbp          | Bin 0 -> 23322 bytes
 .../oldcbp/2.0/good/flow/flow7-2.0.cbp          | Bin 0 -> 21305 bytes
 .../oldcbp/2.0/good/foreach/ForEach1-2.0.cbp    | Bin 0 -> 23615 bytes
 .../oldcbp/2.0/good/foreach/ForEach2-2.0.cbp    | Bin 0 -> 26486 bytes
 .../oldcbp/2.0/good/foreach/ForEach3-2.0.cbp    | Bin 0 -> 24240 bytes
 .../resources/oldcbp/2.0/good/if/If1-2.0.cbp    | Bin 0 -> 24970 bytes
 .../resources/oldcbp/2.0/good/if/If2-2.0.cbp    | Bin 0 -> 24971 bytes
 .../resources/oldcbp/2.0/good/if/If3-2.0.cbp    | Bin 0 -> 24971 bytes
 .../oldcbp/2.0/good/pick/Pick3-2.0.cbp          | Bin 0 -> 18322 bytes
 .../oldcbp/2.0/good/pick/Pick4-2.0.cbp          | Bin 0 -> 22962 bytes
 .../oldcbp/2.0/good/pick/Pick5-2.0.cbp          | Bin 0 -> 20664 bytes
 .../oldcbp/2.0/good/pick/Pick6-2.0.cbp          | Bin 0 -> 21014 bytes
 .../oldcbp/2.0/good/rethrow/Rethrow1-2.0.cbp    | Bin 0 -> 25838 bytes
 .../oldcbp/2.0/good/rethrow/Rethrow2-2.0.cbp    | Bin 0 -> 26251 bytes
 .../oldcbp/2.0/good/throw/Throw1-2.0.cbp        | Bin 0 -> 23856 bytes
 .../oldcbp/2.0/good/throw/Throw2-2.0.cbp        | Bin 0 -> 25526 bytes
 .../oldcbp/2.0/good/throw/Throw3-2.0.cbp        | Bin 0 -> 26006 bytes
 .../oldcbp/2.0/good/throw/Throw4-2.0.cbp        | Bin 0 -> 19872 bytes
 .../oldcbp/2.0/good/throw/Throw5-2.0.cbp        | Bin 0 -> 28056 bytes
 .../oldcbp/2.0/good/throw/Throw6-2.0.cbp        | Bin 0 -> 28014 bytes
 .../oldcbp/2.0/good/throw/Throw7-2.0.cbp        | Bin 0 -> 23783 bytes
 .../oldcbp/2.0/good/wait/Wait1-2.0.cbp          | Bin 0 -> 17327 bytes
 .../oldcbp/2.0/good/wait/Wait2-2.0.cbp          | Bin 0 -> 17376 bytes
 .../oldcbp/2.0/good/while/While1-2.0.cbp        | Bin 0 -> 19034 bytes
 .../good/xpath10-func/GetVariableData1-2.0.cbp  | Bin 0 -> 31972 bytes
 .../good/xpath10-func/GetVariableData2-2.0.cbp  | Bin 0 -> 31994 bytes
 .../good/xpath10-func/GetVariableData3-2.0.cbp  | Bin 0 -> 31993 bytes
 .../good/xpath10-func/GetVariableData4-2.0.cbp  | Bin 0 -> 31993 bytes
 .../xpath10-func/GetVariableProperty1-2.0.cbp   | Bin 0 -> 32068 bytes
 .../xpath20-func/GetVariableData2-xp2.0.cbp     | Bin 0 -> 31799 bytes
 .../xpath20-func/GetVariableData3-xp2.0.cbp     | Bin 0 -> 31525 bytes
 .../xpath20-func/GetVariableData4-xp2.0.cbp     | Bin 0 -> 31539 bytes
 .../xpath20-func/GetVariableProperty1-xp2.0.cbp | Bin 0 -> 31600 bytes
 .../2.0/good/xsd-import/helloworld-Server.cbp   | Bin 0 -> 24838 bytes
 .../bpel/obj/migrate/AbstractObjectVisitor.java | 142 ++++++++++++
 .../bpel/obj/migrate/EqualityComparator.java    |   7 +
 .../ode/bpel/obj/migrate/EqualityVisitor.java   | 222 +++++++++++++++++++
 .../obj/migrate/ExtensibeImplEqualityComp.java  |  30 +++
 .../ode/bpel/obj/migrate/ObjectVisitor.java     |  12 +
 .../apache/ode/bpel/obj/migrate/OmOld2new.java  |  28 ++-
 .../ode/bpel/obj/migrate/TraverseObject.java    | 166 ++++++++++++++
 .../ode/bpel/obj/migrate/DeepEqualityTest.java  |  92 ++++++++
 .../ode/bpel/obj/migrate/MigrationTest.java     |  11 +-
 bpel-nobj/src/test/resources/log4j.properties   |  13 ++
 63 files changed, 775 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/Rakefile
----------------------------------------------------------------------
diff --git a/Rakefile b/Rakefile
index 8877d94..da05f31 100644
--- a/Rakefile
+++ b/Rakefile
@@ -127,7 +127,7 @@ define "ode" do
       end
     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', '-Xmx2048m', 
'-XX:MaxPermSize=256m']
+    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
     webapp_dir = "#{test.compile.target}/webapp"
     test.setup task(:prepare_webapp) do |task|
@@ -178,7 +178,7 @@ define "ode" do
     compile.with projects("bpel-api", "bpel-nobj", "bpel-schemas", "utils"),
       JAVAX.stream, JAXEN, SAXON, WSDL4J, XALAN, XERCES, COMMONS.collections, 
SLF4J, LOG4J, JACKSON, OBJECT_DIFF
     test.resources { 
filter(project("bpel-scripts").path_to("src/main/resources")).into(test.resources.target).run
 }
-    test.with LOG4J
+    test.with LOG4J, projects("bpel-obj")
     package :jar
   end
 
@@ -213,6 +213,7 @@ define "ode" do
   define "bpel-nobj" do
     compile.with projects("utils", "bpel-obj"), JACKSON, LOG4J, SAXON, WSDL4J, 
COMMONS.collections, COMMONS.logging, OBJECT_DIFF
     package :jar
+       test.with XERCES
   end
   
   desc "Helper to covert from old OModel to new OModel"

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
 
b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
new file mode 100644
index 0000000..e389884
--- /dev/null
+++ 
b/bpel-compiler/src/test/java/org/apache/ode/bpel/compiler_2_0/MigrationTest.java
@@ -0,0 +1,52 @@
+package org.apache.ode.bpel.compiler_2_0;
+
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.net.URI;
+import java.net.URL;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ode.bpel.o.Serializer;
+import org.apache.ode.bpel.obj.OProcess;
+import org.apache.ode.bpel.obj.migrate.EqualityVisitor;
+import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp;
+import org.apache.ode.bpel.obj.migrate.OmOld2new;
+import org.apache.ode.bpel.obj.migrate.TraverseObject;
+import org.junit.Assert;
+
+public class MigrationTest extends GoodCompileTest{
+    private static final Log __log = LogFactory.getLog(MigrationTest.class);
+
+    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);
+            String cbpPath = bpel.substring(0, bpel.lastIndexOf(".")) + ".cbp";
+            String oldCbpPath = "/oldcbp" + cbpPath;
+            File oldCbpFile = new 
File(testClass.getResource(oldCbpPath).getFile());
+            
+            OProcess nu = _compiler.compile2OProcess(bpelFile, 0);
+               __log.debug("compiled new OProcess " + nu.getFieldContainer());
+               org.apache.ode.bpel.o.OProcess old = new Serializer(new 
FileInputStream(oldCbpFile)).readOProcess();
+               OmOld2new mig = new OmOld2new();
+               OProcess migrated = (OProcess) mig.migrateFrom(old);
+               __log.debug("migrated new OProcess " + 
migrated.getFieldContainer());
+               TraverseObject traverse = new TraverseObject();
+               EqualityVisitor visitor = new EqualityVisitor(nu);
+               visitor.addCustomComparator(new 
ExtensibeImplEqualityComp(visitor));
+               traverse.accept(visitor);
+               boolean res = (Boolean)traverse.traverseObject(migrated);
+               System.out.print(visitor.getFalseChain());
+               assertEquals(Boolean.TRUE, res);                
+     } catch (Exception ex) {
+            ex.printStackTrace();
+            Assert.fail("Compilation did not succeed.");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/bpel-compiler/src/test/resources/log4j.properties 
b/bpel-compiler/src/test/resources/log4j.properties
index 0f6f26d..8fa716e 100644
--- a/bpel-compiler/src/test/resources/log4j.properties
+++ b/bpel-compiler/src/test/resources/log4j.properties
@@ -21,7 +21,7 @@
 #
 # The logging properties used during tests..
 #
-log4j.rootLogger=INFO, file
+log4j.rootLogger=DEBUG, file
 
 log4j.appender.file=org.apache.log4j.FileAppender
 log4j.appender.file.File=target/test/test.log
@@ -31,6 +31,3 @@ 
log4j.appender.file.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %
 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
 log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p 
(%13F:%L) %3x - %m%n
-
-log4j.category.org.apache.ode=INFO
-

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/AsyncProcess/AsyncProcess2.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/AsyncProcess/AsyncProcess2.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/AsyncProcess/AsyncProcess2.cbp
new file mode 100644
index 0000000..03dadd2
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/AsyncProcess/AsyncProcess2.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign1-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign1-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign1-2.0.cbp
new file mode 100644
index 0000000..32dcb06
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign1-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign2-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign2-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign2-2.0.cbp
new file mode 100644
index 0000000..e730773
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign2-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign3-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign3-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign3-2.0.cbp
new file mode 100644
index 0000000..c150e7b
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign3-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign5-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign5-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign5-2.0.cbp
new file mode 100644
index 0000000..31d68a7
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign5-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign6-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign6-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign6-2.0.cbp
new file mode 100644
index 0000000..a02b782
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign6-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign7-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign7-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign7-2.0.cbp
new file mode 100644
index 0000000..6946d49
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign7-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign8-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign8-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign8-2.0.cbp
new file mode 100644
index 0000000..dcd62fa
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign8-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign9-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign9-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign9-2.0.cbp
new file mode 100644
index 0000000..29a20cb
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/assign/Assign9-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/circularReference/CircularReference.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/circularReference/CircularReference.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/circularReference/CircularReference.cbp
new file mode 100644
index 0000000..31ed937
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/circularReference/CircularReference.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp1-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp1-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp1-2.0.cbp
new file mode 100644
index 0000000..24d7cb8
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp1-2.0.cbp 
differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp2-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp2-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp2-2.0.cbp
new file mode 100644
index 0000000..b863716
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/compensation/comp2-2.0.cbp 
differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow2-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow2-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow2-2.0.cbp
new file mode 100644
index 0000000..28ed143
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow2-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow3-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow3-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow3-2.0.cbp
new file mode 100644
index 0000000..14f741e
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow3-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow4-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow4-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow4-2.0.cbp
new file mode 100644
index 0000000..ff81305
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow4-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow5-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow5-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow5-2.0.cbp
new file mode 100644
index 0000000..9aa1331
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow5-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow6-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow6-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow6-2.0.cbp
new file mode 100644
index 0000000..ef9111d
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow6-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow7-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow7-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow7-2.0.cbp
new file mode 100644
index 0000000..b6c1e53
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/flow/flow7-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach1-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach1-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach1-2.0.cbp
new file mode 100644
index 0000000..da94085
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach1-2.0.cbp 
differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach2-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach2-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach2-2.0.cbp
new file mode 100644
index 0000000..e52debc
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach2-2.0.cbp 
differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach3-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach3-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach3-2.0.cbp
new file mode 100644
index 0000000..5c9f942
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/foreach/ForEach3-2.0.cbp 
differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If1-2.0.cbp
----------------------------------------------------------------------
diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If1-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If1-2.0.cbp
new file mode 100644
index 0000000..4f2fe37
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If1-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If2-2.0.cbp
----------------------------------------------------------------------
diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If2-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If2-2.0.cbp
new file mode 100644
index 0000000..08cfb1f
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If2-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If3-2.0.cbp
----------------------------------------------------------------------
diff --git a/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If3-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If3-2.0.cbp
new file mode 100644
index 0000000..7a681bc
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/if/If3-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick3-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick3-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick3-2.0.cbp
new file mode 100644
index 0000000..e4574b2
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick3-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick4-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick4-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick4-2.0.cbp
new file mode 100644
index 0000000..639ecb9
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick4-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick5-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick5-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick5-2.0.cbp
new file mode 100644
index 0000000..fb14ad5
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick5-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick6-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick6-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick6-2.0.cbp
new file mode 100644
index 0000000..4115a86
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/pick/Pick6-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow1-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow1-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow1-2.0.cbp
new file mode 100644
index 0000000..a74b264
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow1-2.0.cbp 
differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow2-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow2-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow2-2.0.cbp
new file mode 100644
index 0000000..1a3f861
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/rethrow/Rethrow2-2.0.cbp 
differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw1-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw1-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw1-2.0.cbp
new file mode 100644
index 0000000..0b45602
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw1-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw2-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw2-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw2-2.0.cbp
new file mode 100644
index 0000000..95160c3
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw2-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw3-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw3-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw3-2.0.cbp
new file mode 100644
index 0000000..ca3c67a
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw3-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw4-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw4-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw4-2.0.cbp
new file mode 100644
index 0000000..351d335
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw4-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw5-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw5-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw5-2.0.cbp
new file mode 100644
index 0000000..e523dcc
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw5-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw6-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw6-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw6-2.0.cbp
new file mode 100644
index 0000000..a4c1fdb
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw6-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw7-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw7-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw7-2.0.cbp
new file mode 100644
index 0000000..0d5c825
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/throw/Throw7-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait1-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait1-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait1-2.0.cbp
new file mode 100644
index 0000000..fbd7ce2
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait1-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait2-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait2-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait2-2.0.cbp
new file mode 100644
index 0000000..e6c145f
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/wait/Wait2-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/while/While1-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/while/While1-2.0.cbp 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/while/While1-2.0.cbp
new file mode 100644
index 0000000..dfb8547
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/while/While1-2.0.cbp differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData1-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData1-2.0.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData1-2.0.cbp
new file mode 100644
index 0000000..eb94f8c
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData1-2.0.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData2-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData2-2.0.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData2-2.0.cbp
new file mode 100644
index 0000000..05bb1e6
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData2-2.0.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData3-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData3-2.0.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData3-2.0.cbp
new file mode 100644
index 0000000..9fbb2b2
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData3-2.0.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData4-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData4-2.0.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData4-2.0.cbp
new file mode 100644
index 0000000..a6c8608
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableData4-2.0.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableProperty1-2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableProperty1-2.0.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableProperty1-2.0.cbp
new file mode 100644
index 0000000..778806a
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath10-func/GetVariableProperty1-2.0.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData2-xp2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData2-xp2.0.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData2-xp2.0.cbp
new file mode 100644
index 0000000..6d1ac15
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData2-xp2.0.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData3-xp2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData3-xp2.0.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData3-xp2.0.cbp
new file mode 100644
index 0000000..18e1fa4
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData3-xp2.0.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData4-xp2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData4-xp2.0.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData4-xp2.0.cbp
new file mode 100644
index 0000000..e602562
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableData4-xp2.0.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableProperty1-xp2.0.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableProperty1-xp2.0.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableProperty1-xp2.0.cbp
new file mode 100644
index 0000000..599fdbb
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xpath20-func/GetVariableProperty1-xp2.0.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-compiler/src/test/resources/oldcbp/2.0/good/xsd-import/helloworld-Server.cbp
----------------------------------------------------------------------
diff --git 
a/bpel-compiler/src/test/resources/oldcbp/2.0/good/xsd-import/helloworld-Server.cbp
 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xsd-import/helloworld-Server.cbp
new file mode 100644
index 0000000..64da336
Binary files /dev/null and 
b/bpel-compiler/src/test/resources/oldcbp/2.0/good/xsd-import/helloworld-Server.cbp
 differ

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
new file mode 100644
index 0000000..e5bf224
--- /dev/null
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/AbstractObjectVisitor.java
@@ -0,0 +1,142 @@
+package org.apache.ode.bpel.obj.migrate;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.ode.bpel.obj.migrate.TraverseObject.HandleTable;
+
+
+public abstract class AbstractObjectVisitor implements ObjectVisitor{
+       protected ReplaceTable rtab = new ReplaceTable(1000, 0.8f);
+       protected TraverseObject traverse;
+       protected Map<Class, ObjectVisitor>  visitors = new HashMap<Class, 
ObjectVisitor>();
+       
+       @Override
+       public Object visited(Object obj) {
+               if (visitors.get(obj.getClass()) != null){
+                       return visitors.get(obj.getClass()).visited(obj);
+               }
+               return rtab.lookup(obj);
+       }
+
+       @Override
+       public Object visit(Object obj) {
+               ObjectVisitor customVisitor = visitors.get(obj.getClass());
+               if (customVisitor != null){
+                       return customVisitor.visit(obj);
+               }
+               Object n;
+               if (isMap(obj)){
+                       n = visitMap(obj);
+               }else if (isSet(obj)){
+                       n = visitSet(obj);
+               }
+               else if (isCollection(obj)){
+                       n = visitCollection(obj);
+               }else if (isArray(obj)){
+                       n = visitArray(obj);
+               }else{
+                       n = visitPojo(obj);
+               }
+               rtab.assign(obj, n);
+               return n;
+       }
+       private boolean isSet(Object obj) {
+               return obj instanceof Set;
+       }
+
+       protected boolean isArray(Object old) {
+               return old.getClass().isArray();
+       }
+
+       protected boolean isCollection(Object old) {
+               return (old instanceof Collection) && !isSet(old);
+       }
+
+       protected boolean isMap(Object old) {
+               return old instanceof Map;
+       }
+       @Override
+       public void setTraverse(TraverseObject traverseObject) {
+               this.traverse = traverseObject;         
+       }
+       
+       @Override
+       public void addCustomVisitor(Class cls, ObjectVisitor visitor){
+               visitors.put(cls, visitor);
+       }
+
+       public abstract Object visitMap(Object obj);
+       public abstract Object visitCollection(Object obj);
+       public abstract Object visitArray(Object obj);
+       public abstract Object visitPojo(Object obj);
+       public abstract Boolean visitSet(Object obj);
+       
+       /**
+     * Lightweight identity hash table which maps objects to replacement
+     * objects.
+     */   
+    private static class ReplaceTable {
+
+        /* maps object -> index */
+        private final HandleTable htab;
+        /* maps index -> replacement object */
+        private Object[] reps;
+
+        /**
+         * Creates new ReplaceTable with given capacity and load factor.
+         */
+        ReplaceTable(int initialCapacity, float loadFactor) {
+            htab = new HandleTable(initialCapacity, loadFactor);
+            reps = new Object[initialCapacity];
+        }
+
+        /**
+         * Enters mapping from object to replacement object.
+         */
+        void assign(Object obj, Object rep) {
+            int index = htab.assign(obj);
+            while (index >= reps.length) {
+                grow();
+            }
+            reps[index] = rep;
+        }
+
+        /**
+         * Looks up and returns replacement for given object.  If no
+         * replacement is found, returns the lookup object itself.
+         */
+        Object lookup(Object obj) {
+            int index = htab.lookup(obj);
+            return (index >= 0) ? reps[index] : obj;
+        }
+
+        /**
+         * Resets table to its initial (empty) state.
+         */
+        void clear() {
+            Arrays.fill(reps, 0, htab.size(), null);
+            htab.clear();
+        }
+
+        /**
+         * Returns the number of mappings currently in table.
+         */
+        int size() {
+            return htab.size();
+        }
+
+        /**
+         * Increases table capacity.
+         */
+        private void grow() {
+            Object[] newReps = new Object[(reps.length << 1) + 1];
+            System.arraycopy(reps, 0, newReps, 0, reps.length);
+            reps = newReps;
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityComparator.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityComparator.java
 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityComparator.java
new file mode 100644
index 0000000..c9fb45d
--- /dev/null
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityComparator.java
@@ -0,0 +1,7 @@
+package org.apache.ode.bpel.obj.migrate;
+
+public interface EqualityComparator {
+
+       Boolean objectsEqual(Object obj1, Object obj2);
+       Boolean canHanle(Object obj);
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
new file mode 100644
index 0000000..14fdb39
--- /dev/null
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/EqualityVisitor.java
@@ -0,0 +1,222 @@
+package org.apache.ode.bpel.obj.migrate;
+
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class EqualityVisitor extends AbstractObjectVisitor{
+    private static final Log __log = LogFactory.getLog(TraverseObject.class);
+    private List<EqualityComparator> comparators = new 
LinkedList<EqualityComparator>();
+    private List<String> falseChain = new LinkedList<String>();
+    
+    protected Object other;
+    
+    public EqualityVisitor(){
+       
+    }
+       public EqualityVisitor(Object other){
+               this.other = other;
+       }
+
+       public void setOther(Object other){
+               this.other = other;
+       }
+       public void addCustomComparator(EqualityComparator oe){
+               comparators.add(0, oe);
+       }
+       public List<String> getFalseChain(){
+               return falseChain;
+       }
+       @Override
+       public Boolean visited(Object obj){
+               return true;
+       }
+       @Override
+       public Boolean visit(Object obj){
+               __log.debug("comparing Object " + obj.getClass() + "@" + 
System.identityHashCode(obj) + " " + obj + 
+                               " and " + other.getClass() + "@" + 
System.identityHashCode(other) + " " + other);
+               Boolean res =  (Boolean)super.visit(obj);
+               if (!res){
+                       falseChain.add(0, obj.getClass().getSimpleName());
+               }
+               return res;
+       }
+       @SuppressWarnings("rawtypes")
+       @Override
+       public Boolean visitMap(Object obj) {
+               if (obj == other) return true;
+               if (other == null) return false;
+               Map m1 = (Map)obj;
+               Map m2 = null;
+               try{
+                       m2 = (Map)other;
+               }catch (ClassCastException e){
+                       return false;
+               }
+               if (m1.size() != m2.size()) return false;
+               Set ks1 = m1.keySet();
+               Set ks2 = m2.keySet();
+               for (Object k1 : ks1){
+                       Object k2 = contains(ks2, k1);
+                       if (k2 == null){
+                               return false;
+                       }
+                       Object o1 = m1.get(k1);
+                       Object o2 = m2.get(k2);
+                       if (o1 == null){
+                               if (!(o2 == null)){
+                                       return false;
+                               }
+                       }
+                       Object pre = other;
+                       other = o2;
+                       Boolean e = (Boolean)traverse.traverseObject(o1);
+                       if (!e) return false;
+                       other = pre;
+               }
+               return true;
+       }
+
+       @Override
+       @SuppressWarnings("rawtypes")
+       public Boolean visitSet(Object obj){
+               if (obj == other) return true;
+               if (other == null) return false;
+               
+               Collection c1 = (Collection)obj;
+               Collection c2 = null;
+               try {
+                       c2 = (Collection)other;
+               }catch(ClassCastException e){
+                       return false;
+               }
+               if (c1.size() != c2.size()) return false;
+               Iterator i1 = c1.iterator();
+               while (i1.hasNext()){
+                       if (contains(c2, i1.next()) == null) return false;
+               }
+               return true;
+       }
+       
+       private Object contains(Collection c, Object t1) {
+               Iterator itor = c.iterator();
+               Object t2;
+               Object pre = other;
+               while (itor.hasNext()){
+                       t2 = itor.next();
+                       other = t2;
+                       if ((Boolean)traverse.traverseObject(t1, false)) {
+                               return t2;
+                       }
+               }
+               traverse.getHtab().assign(t1);
+               other = pre;
+               return null;
+       }
+
+       @SuppressWarnings("rawtypes")
+       @Override
+       public Boolean visitCollection(Object obj) {
+               if (obj == other) return true;
+               if (other == null) return false;
+               
+               Collection c = (Collection)obj;
+               Collection c2 = null;
+               try {
+                       c2 = (Collection)other;
+               }catch(ClassCastException e){
+                       return false;
+               }
+               if (c.size() != c2.size()) return false;
+
+               Iterator i1 = c.iterator();
+               Iterator i2 = c2.iterator();
+               while (i1.hasNext()){
+                       Object o1 = i1.next();
+                       Object o2 = i2.next();
+                       Object pre = other;
+                       other = o2;
+                       Boolean e = (Boolean)traverse.traverseObject(o1);
+                       if (!e) return false;
+                       other = pre;
+               }
+               return true;
+       }
+
+       @Override
+       public Boolean visitArray(Object obj) {
+               throw new UnsupportedOperationException();
+       }
+
+       @Override
+       public Boolean visitPojo(Object obj) {
+               EqualityComparator customComp = getCustomComparator(obj);
+               if (customComp != null){
+                       return customComp.objectsEqual(obj, other);
+               }
+               if (obj == other) return true;
+               if (other == null) return false;
+               if (obj.getClass() != other.getClass()) return false;
+               try{
+                       obj.getClass().getDeclaredMethod("equals", 
Object.class);
+                       return obj.equals(other);
+               }catch (NoSuchMethodException e){
+                       return equalityByReflection(obj);
+               }
+       }
+
+       private EqualityComparator getCustomComparator(Object obj) {
+               for (EqualityComparator c : comparators){
+                       if (c.canHanle(obj)){
+                               return c;
+                       }
+               }
+               return null;
+       }
+       public Boolean equalityByReflection(Object obj) {
+               //TODO if it's sufficient to just compare public fields?
+               Field[] fields = obj.getClass().getFields();
+               Field[] fields2 = other.getClass().getFields();
+               if (! Arrays.equals(fields, fields2)){
+                       return false;
+               }
+               
+               for (Field f : fields){
+                       if ((Modifier.TRANSIENT & f.getModifiers()) != 0){
+                               continue; //skip transient fields
+                       }
+                       try {
+                               Object v1 = f.get(obj);
+                               Object v2 = f.get(other);
+                               if (v1 == null && v2 == null){
+                                       continue;
+                               }
+                               if (v1 == null || v2 == null){
+                                       return false;
+                               }
+                               Object pre = other;
+                               other = v2;
+                               Boolean res = 
(Boolean)traverse.traverseObject(v1);
+                               if (!res){
+                                       falseChain.add(f.getName());
+                                       return false;
+                               }
+                               other = pre;
+                       } catch (Exception e) {
+                               //should not get here
+                               e.printStackTrace();
+                       }
+               }
+               return true;
+       }
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/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
new file mode 100644
index 0000000..0985ac2
--- /dev/null
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java
@@ -0,0 +1,30 @@
+package org.apache.ode.bpel.obj.migrate;
+
+import org.apache.ode.bpel.obj.ExtensibleImpl;
+
+public class ExtensibeImplEqualityComp implements EqualityComparator{
+       private EqualityVisitor visitor;
+       
+       public ExtensibeImplEqualityComp() {
+       }
+       public ExtensibeImplEqualityComp(EqualityVisitor visitor){
+               this.visitor = visitor;
+       }
+
+       @Override
+       public Boolean objectsEqual(Object obj1, Object obj2) {
+               ExtensibleImpl esi = (ExtensibleImpl)obj1;
+               ExtensibleImpl esio = null;
+               try{
+                       esio = (ExtensibleImpl)obj2;
+               }catch(ClassCastException e){
+                       return false;
+               }
+               visitor.setOther(esio.getFieldContainer());
+               return visitor.visit(esi.getFieldContainer());
+       }
+       @Override
+       public Boolean canHanle(Object obj) {
+               return obj instanceof ExtensibleImpl;
+       }
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java
new file mode 100644
index 0000000..b9caa12
--- /dev/null
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ObjectVisitor.java
@@ -0,0 +1,12 @@
+package org.apache.ode.bpel.obj.migrate;
+
+public interface ObjectVisitor {
+
+       Object visited(Object obj);
+
+       Object visit(Object obj);
+
+       void setTraverse(TraverseObject traverseObject);
+
+       void addCustomVisitor(Class cls, ObjectVisitor visitor);
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
index 3f918c5..2f55f4f 100644
--- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
+++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/OmOld2new.java
@@ -1,9 +1,12 @@
 package org.apache.ode.bpel.obj.migrate;
 
 import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 import java.util.Set;
@@ -12,6 +15,8 @@ import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.ode.bpel.obj.ExtensibleImpl;
 
+import com.sun.xml.internal.ws.api.pipe.Tube;
+
 public class OmOld2new {
     private static final Log __log = LogFactory.getLog(OmOld2new.class);
     
@@ -107,14 +112,20 @@ public class OmOld2new {
                Object tn = initiateNew(old);
                assert tn instanceof ExtensibleImpl;
                ExtensibleImpl n = (ExtensibleImpl) tn;
-               Field[] fields = old.getClass().getFields();
+               List<Field> fields  = getAllFields(old.getClass());
                Map<String, Object> fieldMap = n.getFieldContainer();
                for (Field f : fields){
+                       if ((f.getModifiers() & Modifier.STATIC) != 0){
+                               continue; //skip static fields
+                       }
+                       f.setAccessible(true);
                        try{
                                String fname = f.getName();
                                Object fvalue = f.get(old);
                                if (fvalue != null){
                                        fieldMap.put(fname, 
migrateFrom(fvalue));
+                               }else{
+                                       fieldMap.put(fname, null);
                                }
                        } catch (Exception e) {
                                RuntimeException rte = new 
RuntimeException("Error when try to construct corresponding new Omodel class 
from old one:"
@@ -123,8 +134,21 @@ public class OmOld2new {
                                throw rte;
                        }
                }
-               return null;
+               return n;
+       }
+       private List<Field> getAllFields(Class cls) {
+               return getAllFieldsRec(cls, new ArrayList<Field>());
        }
+
+       private List<Field> getAllFieldsRec(Class cls, ArrayList<Field> fields) 
{
+               Class par = cls.getSuperclass();
+               if (par != null){
+                       getAllFieldsRec(par, fields);
+               }
+               fields.addAll(Arrays.asList(cls.getDeclaredFields()));
+               return fields;
+       }
+
        private Object initiateNew(Object old) {
                String clsName = old.getClass().getName();
                String qcls = clsName.replace(".o.", ".obj.");

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java
new file mode 100644
index 0000000..260ce92
--- /dev/null
+++ 
b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/TraverseObject.java
@@ -0,0 +1,166 @@
+package org.apache.ode.bpel.obj.migrate;
+
+import java.util.Arrays;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+
+public class TraverseObject{
+    private static final Log __log = LogFactory.getLog(TraverseObject.class);
+
+    private HandleTable htab = new HandleTable(1000, 0.8f);
+       private ObjectVisitor visitor;
+       
+       public HandleTable getHtab() {
+               return htab;
+       }
+
+       public TraverseObject(){
+       }
+       public void accept(ObjectVisitor visitor){
+               this.visitor = visitor;
+               visitor.setTraverse(this);
+       }
+       public Object traverseObject(Object obj){
+               return traverseObject(obj, true);
+       }
+       public Object traverseObject(Object obj, boolean assign){
+               __log.debug("current object " + obj);
+               if (obj == null) return null;
+               if (htab.lookup(obj) != -1){
+                       return visitor.visited(obj);
+               }
+               if (assign) htab.assign(obj);
+               Object n;
+               n = visitor.visit(obj);
+               return n;
+       }
+       
+       /**
+       * Stole from openjdk OOS
+    * Lightweight identity hash table which maps objects to integer handles,
+    * assigned in ascending order.
+    */
+   public static class HandleTable {
+
+       /* number of mappings in table/next available handle */
+       private int size;
+       /* size threshold determining when to expand hash spine */
+       private int threshold;
+       /* factor for computing size threshold */
+       private final float loadFactor;
+       /* maps hash value -> candidate handle value */
+       private int[] spine;
+       /* maps handle value -> next candidate handle value */
+       private int[] next;
+       /* maps handle value -> associated object */
+       private Object[] objs;
+
+       /**
+        * Creates new HandleTable with given capacity and load factor.
+        */
+       HandleTable(int initialCapacity, float loadFactor) {
+           this.loadFactor = loadFactor;
+           spine = new int[initialCapacity];
+           next = new int[initialCapacity];
+           objs = new Object[initialCapacity];
+           threshold = (int) (initialCapacity * loadFactor);
+           clear();
+       }
+
+       /**
+        * Assigns next available handle to given object, and returns handle
+        * value.  Handles are assigned in ascending order starting at 0.
+        */
+       int assign(Object obj) {
+           if (size >= next.length) {
+               growEntries();
+           }
+           if (size >= threshold) {
+               growSpine();
+           }
+           insert(obj, size);
+           return size++;
+       }
+
+       /**
+        * Looks up and returns handle associated with given object, or -1 if
+        * no mapping found.
+        */
+       int lookup(Object obj) {
+           if (size == 0) {
+               return -1;
+           }
+           int index = hash(obj) % spine.length;
+           for (int i = spine[index]; i >= 0; i = next[i]) {
+               if (objs[i] == obj) {
+                   return i;
+               }
+           }
+           return -1;
+       }
+
+       /**
+        * Resets table to its initial (empty) state.
+        */
+       void clear() {
+           Arrays.fill(spine, -1);
+           Arrays.fill(objs, 0, size, null);
+           size = 0;
+       }
+
+       /**
+        * Returns the number of mappings currently in table.
+        */
+       int size() {
+           return size;
+       }
+
+       /**
+        * Inserts mapping object -> handle mapping into table.  Assumes table
+        * is large enough to accommodate new mapping.
+        */
+       private void insert(Object obj, int handle) {
+           int index = hash(obj) % spine.length;
+           objs[handle] = obj;
+           next[handle] = spine[index];
+           spine[index] = handle;
+       }
+
+       /**
+        * Expands the hash "spine" -- equivalent to increasing the number of
+        * buckets in a conventional hash table.
+        */
+       private void growSpine() {
+           spine = new int[(spine.length << 1) + 1];
+           threshold = (int) (spine.length * loadFactor);
+           Arrays.fill(spine, -1);
+           for (int i = 0; i < size; i++) {
+               insert(objs[i], i);
+           }
+       }
+
+       /**
+        * Increases hash table capacity by lengthening entry arrays.
+        */
+       private void growEntries() {
+           int newLength = (next.length << 1) + 1;
+           int[] newNext = new int[newLength];
+           System.arraycopy(next, 0, newNext, 0, size);
+           next = newNext;
+
+           Object[] newObjs = new Object[newLength];
+           System.arraycopy(objs, 0, newObjs, 0, size);
+           objs = newObjs;
+       }
+
+       /**
+        * Returns hash value for given object.
+        */
+       private int hash(Object obj) {
+           return System.identityHashCode(obj) & 0x7FFFFFFF;
+       }
+   }
+
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java 
b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java
new file mode 100644
index 0000000..4509ed1
--- /dev/null
+++ 
b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/DeepEqualityTest.java
@@ -0,0 +1,92 @@
+package org.apache.ode.bpel.obj.migrate;
+
+import static org.junit.Assert.assertEquals;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.xml.namespace.QName;
+
+import org.apache.ode.bpel.obj.DebugInfo;
+import org.junit.Test;
+
+public class DeepEqualityTest {
+     @Test
+       public void simpleListTest(){
+               List<String> ls1 = new ArrayList<String>();
+               ls1.add("Hello");
+               ls1.add("world");
+               List<String> ls2 = new ArrayList<String>();
+               ls2.add("Hello");
+               ls2.add("world");
+               TraverseObject traverse = new TraverseObject();
+               EqualityVisitor visitor = new EqualityVisitor(ls2);
+               traverse.accept(visitor);
+               assertEquals(Boolean.TRUE, traverse.traverseObject(ls1));
+               ls1.add(0, "!");
+               ls2.add("!");
+               visitor.setOther(ls2);
+               assertEquals(Boolean.TRUE, traverse.traverseObject(ls1));       
        
+       }
+       
+       @Test
+       public void simpleSetTest(){
+               Set<String> s1 = new LinkedHashSet();
+               s1.add("hello");
+               s1.add("world");
+               Set<String> s2 = new LinkedHashSet();
+               s2.add("world");
+               s2.add("hello");
+               
+               TraverseObject traverse = new TraverseObject();
+               EqualityVisitor visitor = new EqualityVisitor(s2);
+               traverse.accept(visitor);
+               assertEquals(Boolean.TRUE, traverse.traverseObject(s1));
+               
+       }
+       
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       @Test
+       public void simpleMapTest(){
+               Map<String, Object> m1 = new HashMap();
+               m1.put("item1", "string1");
+               m1.put("item2", new ArrayList());
+               Map<String, Object> m2 = new HashMap();
+               m2.put("item1", "string1");
+               m2.put("item2", new ArrayList());
+
+               TraverseObject traverse = new TraverseObject();
+               EqualityVisitor visitor = new EqualityVisitor(m2);
+               traverse.accept(visitor);
+               assertEquals(Boolean.TRUE, traverse.traverseObject(m1));
+       }
+       
+       @SuppressWarnings({ "rawtypes", "unchecked" })
+       @Test
+       public void simpleTest() throws Exception{
+               Map m1 = new HashMap();
+               QName n1 = new QName("localpart");
+               URI u1 = new URI("urn://a/uri");
+               m1.put(u1, n1);
+               DebugInfo d1 = new DebugInfo("/a/path", 0, 1, m1);
+               m1.put("cyclic", d1);
+               
+               Map m2 = new HashMap();
+               QName n2 = new QName("localpart");
+               URI u2 = new URI("urn://a/uri");
+               m2.put(u2, n2);
+               DebugInfo d2 = new DebugInfo("/a/path", 0, 1, m2);
+               m2.put("cylic", d2);
+
+               TraverseObject traverse = new TraverseObject();
+               EqualityVisitor visitor = new EqualityVisitor(d2);
+               visitor.addCustomComparator(new 
ExtensibeImplEqualityComp(visitor));
+               traverse.accept(visitor);
+               assertEquals(Boolean.TRUE, traverse.traverseObject(d1));
+       }
+}

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/MigrationTest.java
----------------------------------------------------------------------
diff --git 
a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/MigrationTest.java 
b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/MigrationTest.java
index d7c3cc7..867da32 100644
--- a/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/MigrationTest.java
+++ b/bpel-nobj/src/test/java/org/apache/ode/bpel/obj/migrate/MigrationTest.java
@@ -1,5 +1,7 @@
 package org.apache.ode.bpel.obj.migrate;
 
+import static org.junit.Assert.assertEquals;
+
 import java.io.File;
 import java.io.FileFilter;
 import java.io.FileInputStream;
@@ -10,7 +12,6 @@ import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.ode.bpel.o.DebugInfo;
 import org.apache.ode.bpel.o.OProcess;
 import org.apache.ode.bpel.o.Serializer;
 import org.junit.Test;
@@ -21,8 +22,14 @@ public class MigrationTest {
        public void runTest(File file) throws Exception{
                OProcess old = new Serializer(new 
FileInputStream(file)).readOProcess();
                
+//             OProcess old2 = new Serializer(new 
FileInputStream(file)).readOProcess();
+//             TraverseObject traverse = new TraverseObject();
+//             EqualityVisitor visitor = new EqualityVisitor(old);
+//             traverse.accept(visitor);
+//             assertEquals(Boolean.TRUE, traverse.traverseObject(old2));
+               
                OmOld2new mig = new OmOld2new();
-               mig.migrateFrom(old);
+               org.apache.ode.bpel.obj.OProcess migrated = 
(org.apache.ode.bpel.obj.OProcess)mig.migrateFrom(old);
        }
        
        @Test

http://git-wip-us.apache.org/repos/asf/ode/blob/cc9eab25/bpel-nobj/src/test/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/bpel-nobj/src/test/resources/log4j.properties 
b/bpel-nobj/src/test/resources/log4j.properties
new file mode 100644
index 0000000..2b02abc
--- /dev/null
+++ b/bpel-nobj/src/test/resources/log4j.properties
@@ -0,0 +1,13 @@
+log4j.rootLogger=DEBUG, file, stdout
+
+# Console appender
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d [%-15.15t] %-5p %-30.30c{1} 
- %m%n
+
+log4j.appender.file=org.apache.log4j.FileAppender
+log4j.appender.file.File=target/test/test.log
+log4j.appender.file.layout=org.apache.log4j.PatternLayout
+log4j.appender.file.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p (%13F:%L) 
%3x - %m%n
+
+

Reply via email to