Deep Equality worked; passed some tests of migration from old to new.
Project: http://git-wip-us.apache.org/repos/asf/ode/repo Commit: http://git-wip-us.apache.org/repos/asf/ode/commit/349eacb9 Tree: http://git-wip-us.apache.org/repos/asf/ode/tree/349eacb9 Diff: http://git-wip-us.apache.org/repos/asf/ode/diff/349eacb9 Branch: refs/heads/master Commit: 349eacb9c8ae3dc8e4c5a52fe049259a5bd577dc Parents: 6e9b07d Author: fangzhen <[email protected]> Authored: Tue Jul 29 10:48:34 2014 +0800 Committer: fangzhen <[email protected]> Committed: Tue Jul 29 10:48:34 2014 +0800 ---------------------------------------------------------------------- .../ode/bpel/compiler_2_0/MigrationTest.java | 5 +- .../elang/xpath10/obj/OXPath10Expression.java | 2 +- .../java/org/apache/ode/bpel/obj/DebugInfo.java | 20 ++- .../ode/bpel/obj/OConstantExpression.java | 6 +- .../org/apache/ode/bpel/obj/OPartnerLink.java | 6 +- .../bpel/obj/migrate/AbstractObjectVisitor.java | 6 +- .../bpel/obj/migrate/DebugInfoComparator.java | 40 +++++ .../ode/bpel/obj/migrate/EqualityVisitor.java | 174 +++++++++++++++---- .../obj/migrate/ExtensibeImplEqualityComp.java | 53 +++++- .../ode/bpel/obj/migrate/ObjectVisitor.java | 2 + .../apache/ode/bpel/obj/migrate/OmOld2new.java | 5 +- 11 files changed, 270 insertions(+), 49 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/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 index 6658931..314c036 100644 --- 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 @@ -11,6 +11,7 @@ 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.DebugInfoComparator; import org.apache.ode.bpel.obj.migrate.EqualityVisitor; import org.apache.ode.bpel.obj.migrate.ExtensibeImplEqualityComp; import org.apache.ode.bpel.obj.migrate.OmOld2new; @@ -43,10 +44,10 @@ public class MigrationTest extends GoodCompileTest{ TraverseObject traverse = new TraverseObject(); EqualityVisitor visitor = new EqualityVisitor(nu); visitor.addCustomComparator(new ExtensibeImplEqualityComp(visitor)); + visitor.addCustomComparator(new DebugInfoComparator(visitor)); traverse.accept(visitor); boolean res = (Boolean)traverse.traverseObject(migrated); - System.out.print(visitor.getFalseChain()); - assertEquals(Boolean.TRUE, res); + 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/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/elang/xpath10/obj/OXPath10Expression.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/elang/xpath10/obj/OXPath10Expression.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/elang/xpath10/obj/OXPath10Expression.java index 6620441..809c2d1 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/elang/xpath10/obj/OXPath10Expression.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/elang/xpath10/obj/OXPath10Expression.java @@ -309,7 +309,7 @@ public class OXPath10Expression extends OLValueExpression implements Serializabl private final String LOCATION = "location"; @JsonCreator - SigGetVariableData(){} + public SigGetVariableData(){} private SigGetVariableData(String varname, String partname, String location) { setVarname(varname); http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/DebugInfo.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/DebugInfo.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/DebugInfo.java index 584ed69..3135a74 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/DebugInfo.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/DebugInfo.java @@ -18,6 +18,8 @@ */ package org.apache.ode.bpel.obj; +import java.io.IOException; +import java.io.ObjectInputStream; import java.io.Serializable; import java.util.HashMap; import java.util.Map; @@ -114,5 +116,21 @@ public class DebugInfo extends ExtensibleImpl implements Serializable{ fieldContainer.put(STARTLINE, startLine); } - //TODO: check legacy OModel DebugInfo#readObject. + private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException{ + ois.defaultReadObject(); + int size = ois.readInt(); + String cls = (String)ois.readObject(); + try { + fieldContainer = (Map<String, Object>)(Class.forName(cls).newInstance()); + } catch (Exception e) { + //should never get here + e.printStackTrace(); + } + for (int i = 0; i < size; i++){ + String key = (String)ois.readObject(); + Object value = ois.readObject(); + if (!key.equals(DESCRIPTION)) + fieldContainer.put(key, value); + } + } } http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OConstantExpression.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OConstantExpression.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OConstantExpression.java index d240449..793922f 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OConstantExpression.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OConstantExpression.java @@ -24,7 +24,7 @@ import com.fasterxml.jackson.annotation.JsonCreator; public class OConstantExpression extends OExpression implements Serializable{ public static final long serialVersionUID = -1L; - private Object _val; + private static String VAL = "_val"; @JsonCreator public OConstantExpression(){} @@ -34,14 +34,14 @@ public class OConstantExpression extends OExpression implements Serializable{ } public Object getVal() { - return _val; + return fieldContainer.get(VAL); } public void setVal(Object val) { if (val == null) throw new IllegalArgumentException("OConstatExpression cannot be null."); - _val = val; + fieldContainer.put(VAL, val); } public String toString() { http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OPartnerLink.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OPartnerLink.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OPartnerLink.java index 1d61b29..7d302b0 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OPartnerLink.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/OPartnerLink.java @@ -56,11 +56,11 @@ public class OPartnerLink extends OBase implements Serializable{ private static final String INITIALIZEPARTNERROLE = "initializePartnerRole"; /** The set of CorrelationSets that may be used as a match criteria, organized by {@link Operation} */ - private static final String NONINITIATINGCORRELATIONSETS = "nonIntitiatingCorrelationSets"; + private static final String NONINITIATINGCORRELATIONSETS = "_nonIntitiatingCorrelationSets"; /** The set of joining CorrelationSets that may be used as a match criteria, organized by {@link Operation} */ - private static final String JOININGCORRELATIONSETS = "joiningCorrelationSets"; + private static final String JOININGCORRELATIONSETS = "_joiningCorrelationSets"; /** The set of {@link Operation}s that can be used to create a process instance. */ - private static final String CREATEINSTANCEOPERATIONS = "createInstanceOperations"; + private static final String CREATEINSTANCEOPERATIONS = "_createInstanceOperations"; @JsonCreator public OPartnerLink(){ http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/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 index 1a0dca2..5a8ce53 100644 --- 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 @@ -21,7 +21,11 @@ public abstract class AbstractObjectVisitor implements ObjectVisitor{ } return rtab.lookup(obj); } - + + @Override + public TraverseObject getTraverse(){ + return traverse; + } @Override public Object visit(Object obj) { ObjectVisitor customVisitor = visitors.get(obj.getClass()); http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DebugInfoComparator.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DebugInfoComparator.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DebugInfoComparator.java new file mode 100644 index 0000000..9d562ae --- /dev/null +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/DebugInfoComparator.java @@ -0,0 +1,40 @@ +package org.apache.ode.bpel.obj.migrate; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.ode.bpel.obj.DebugInfo; + +public class DebugInfoComparator implements EqualityComparator{ + private static final Log __log = LogFactory.getLog(DebugInfoComparator.class); + private EqualityVisitor visitor; + public DebugInfoComparator(EqualityVisitor visitor){ + this.visitor = visitor; + } + + @Override + public Boolean objectsEqual(Object obj1, Object obj2) { + if (!(obj2 instanceof DebugInfo)){ + if (!visitor.logFalseThrough){ + __log.debug("Unequal in DebugInfo, object2 is not a DebugInfo"); + } + return false; + } + DebugInfo o1 = (DebugInfo)obj1; + DebugInfo o2 = (DebugInfo)obj2; + boolean res = o1.getStartLine() == o2.getStartLine() && + o1.getEndLine() == o2.getEndLine() && + o1.getSourceURI().equals(o2.getSourceURI()); + if (!res){ + if (!visitor.logFalseThrough){ + __log.info("Unequal in DebugInfo, " + o1 + " and " + o2); + } + } + return res; + } + + @Override + public Boolean canHanle(Object obj) { + return obj instanceof DebugInfo; + } + +} http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/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 index 14fdb39..bfcbd15 100644 --- 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 @@ -9,79 +9,96 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.Stack; 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 static final Log __log = LogFactory.getLog(TraverseObject.class); private List<EqualityComparator> comparators = new LinkedList<EqualityComparator>(); - private List<String> falseChain = new LinkedList<String>(); + private Stack<String> st = new Stack<String>(); protected Object other; - + public boolean logFalseThrough = false; public EqualityVisitor(){ } public EqualityVisitor(Object other){ this.other = other; + st.push(":" + other.getClass().getSimpleName()); } - 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 + + if (!logFalseThrough){ + __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()); } + Boolean res = (Boolean)super.visit(obj); return res; } @SuppressWarnings("rawtypes") @Override public Boolean visitMap(Object obj) { if (obj == other) return true; - if (other == null) return false; + if (other == null) { + if (!logFalseThrough){ + __log.debug("Unequal in Map: Object2 is null. " + st); + } + return false; + } Map m1 = (Map)obj; Map m2 = null; try{ m2 = (Map)other; }catch (ClassCastException e){ + if (!logFalseThrough){ + __log.debug("Unequal in Map: Object2 is not a map, it's a" + other.getClass() + "\n" + st); + } + return false; + } + if (m1.size() != m2.size()) { + if (!logFalseThrough){ + __log.debug("Unequal in Map: size mismatch. " + st + + "\n size: " + m1.size() + " and " + m2.size()); + } return false; } - if (m1.size() != m2.size()) return false; Set ks1 = m1.keySet(); Set ks2 = m2.keySet(); for (Object k1 : ks1){ + st.push(k1.toString()); Object k2 = contains(ks2, k1); if (k2 == null){ + if (!logFalseThrough){ + __log.debug("Unequal in Map: cant find key. " + st + "\n missing key: " + k1); + } return false; } Object o1 = m1.get(k1); Object o2 = m2.get(k2); if (o1 == null){ if (!(o2 == null)){ - return false; + if (!logFalseThrough){ + __log.debug("Unequal in Map: mismatch, one is null" + st + + "\n When dealing with " + o1 + " and " + o2); + } + return false; } } + + st.pop(); + st.push(k1.toString() + ":" + o1.getClass().getSimpleName()); + Object pre = other; other = o2; Boolean e = (Boolean)traverse.traverseObject(o1); - if (!e) return false; + if (!e) { + return false; + } other = pre; + st.pop(); } return true; } @@ -90,19 +107,42 @@ public class EqualityVisitor extends AbstractObjectVisitor{ @SuppressWarnings("rawtypes") public Boolean visitSet(Object obj){ if (obj == other) return true; - if (other == null) return false; + if (other == null) { + if (!logFalseThrough){ + __log.debug("Unequal in Set, Object2 is null. " + st); + } + return false; + } Collection c1 = (Collection)obj; Collection c2 = null; try { c2 = (Collection)other; }catch(ClassCastException e){ + if (!logFalseThrough){ + __log.debug("Unequal in Set: Object2 is not a Set, it's a" + other.getClass() + "\n" + st); + } + return false; + } + if (c1.size() != c2.size()) { + if (!logFalseThrough){ + __log.debug("Unequal in Set: size mismatch. " + st + + "\n. sizes are " + c1.size() + " and " + c2.size()); + } return false; } - if (c1.size() != c2.size()) return false; Iterator i1 = c1.iterator(); while (i1.hasNext()){ - if (contains(c2, i1.next()) == null) return false; + Object o1 = i1.next(); + st.push(":" + o1.getClass().getSimpleName()); + if (contains(c2, o1) == null) { + if (!logFalseThrough){ + __log.debug("Unequal in Set: Object mismatch. " + st + + "\n" + "cann't find" + o1); + } + return false; + } + st.pop(); } return true; } @@ -111,15 +151,18 @@ public class EqualityVisitor extends AbstractObjectVisitor{ Iterator itor = c.iterator(); Object t2; Object pre = other; + logFalseThrough = true; while (itor.hasNext()){ t2 = itor.next(); other = t2; if ((Boolean)traverse.traverseObject(t1, false)) { + logFalseThrough = false; return t2; } } traverse.getHtab().assign(t1); other = pre; + logFalseThrough = false; return null; } @@ -127,27 +170,45 @@ public class EqualityVisitor extends AbstractObjectVisitor{ @Override public Boolean visitCollection(Object obj) { if (obj == other) return true; - if (other == null) return false; + if (other == null) { + if (!logFalseThrough){ + __log.debug("Unequal in Collection, Object2 is null. " + st); + } + return false; + } Collection c = (Collection)obj; Collection c2 = null; try { c2 = (Collection)other; }catch(ClassCastException e){ + if (!logFalseThrough){ + __log.debug("Unequal in Collection: Object2 is not a Collection, it's a" + other.getClass() + "\n" + st); + } + return false; + } + if (c.size() != c2.size()) { + if (!logFalseThrough){ + __log.debug("Unequal in Collection: size mismatch. " + st + + "\n. sizes are " + c.size() + " and " + c2.size()); + } 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(); + st.push(":" + o1.getClass().getSimpleName()); Object pre = other; other = o2; Boolean e = (Boolean)traverse.traverseObject(o1); - if (!e) return false; + if (!e) { + return false; + } other = pre; + st.pop(); } return true; } @@ -164,11 +225,29 @@ public class EqualityVisitor extends AbstractObjectVisitor{ return customComp.objectsEqual(obj, other); } if (obj == other) return true; - if (other == null) return false; - if (obj.getClass() != other.getClass()) return false; + if (other == null) { + if (!logFalseThrough){ + __log.debug("Unequal in POJO: Object2 is null." + st); + } + return false; + } + if (obj.getClass() != other.getClass()) { + if(!logFalseThrough){ + __log.debug("Unequal in POJO: type mistach. " + st + + "\nmismatched types are: " + obj.getClass().getSimpleName() + + " and " + other.getClass().getSimpleName()); + } + return false; + } try{ obj.getClass().getDeclaredMethod("equals", Object.class); - return obj.equals(other); + boolean e = obj.equals(other); + if (!e){ + if (!logFalseThrough){ + __log.debug("Unequal in POJO: not equal by equals() method" + st); + } + } + return e; }catch (NoSuchMethodException e){ return equalityByReflection(obj); } @@ -187,6 +266,9 @@ public class EqualityVisitor extends AbstractObjectVisitor{ Field[] fields = obj.getClass().getFields(); Field[] fields2 = other.getClass().getFields(); if (! Arrays.equals(fields, fields2)){ + if (!logFalseThrough){ + __log.debug("Unequal: getFields() of two Object do not match " + st); + } return false; } @@ -195,22 +277,31 @@ public class EqualityVisitor extends AbstractObjectVisitor{ continue; //skip transient fields } try { + st.push(f.getName()+ ":" + f.getType().getSimpleName()); Object v1 = f.get(obj); Object v2 = f.get(other); if (v1 == null && v2 == null){ continue; } if (v1 == null || v2 == null){ + if (!logFalseThrough){ + __log.debug("Unequal: one field is null" + st + ".\n When dealing with " + + v1 + " and " + v2); + } return false; } Object pre = other; other = v2; Boolean res = (Boolean)traverse.traverseObject(v1); if (!res){ - falseChain.add(f.getName()); + if (!logFalseThrough){ + __log.debug("Unequal:" + st + ".\n When dealing with " + + v1 + " and " + v2); + } return false; } other = pre; + st.pop(); } catch (Exception e) { //should not get here e.printStackTrace(); @@ -218,5 +309,18 @@ public class EqualityVisitor extends AbstractObjectVisitor{ } return true; } - + + public void setOther(Object other){ + this.other = other; + } + public void addCustomComparator(EqualityComparator oe){ + comparators.add(0, oe); + } + @Override + public Boolean visited(Object obj){ + return true; + } + public Stack<String> getSt() { + return st; + } } http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java ---------------------------------------------------------------------- diff --git a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java index 0985ac2..14db7d8 100644 --- a/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java +++ b/bpel-nobj/src/main/java/org/apache/ode/bpel/obj/migrate/ExtensibeImplEqualityComp.java @@ -1,8 +1,18 @@ package org.apache.ode.bpel.obj.migrate; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Set; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.apache.ode.bpel.obj.ExtensibleImpl; +import org.apache.ode.bpel.obj.OProcess; public class ExtensibeImplEqualityComp implements EqualityComparator{ + private static final Log __log = LogFactory.getLog(DebugInfoComparator.class); private EqualityVisitor visitor; public ExtensibeImplEqualityComp() { @@ -13,15 +23,54 @@ public class ExtensibeImplEqualityComp implements EqualityComparator{ @Override public Boolean objectsEqual(Object obj1, Object obj2) { + if (obj2 == null) { + if (!visitor.logFalseThrough){ + __log.debug("Unequal in ExtensibleImpl: Object2 is null. " + + visitor.getSt()); + } + return false; + } ExtensibleImpl esi = (ExtensibleImpl)obj1; ExtensibleImpl esio = null; + if (obj1.getClass() != obj2.getClass()){ + if (!visitor.logFalseThrough){ + __log.debug("Unequal in ExtensibleImpl: Type mismatch. " + visitor.getSt() + + "\nmismatched type: " + obj1.getClass().getSimpleName() + + " and " + obj2.getClass().getSimpleName()); + } + return false; + } try{ esio = (ExtensibleImpl)obj2; }catch(ClassCastException e){ + //won't get here return false; } - visitor.setOther(esio.getFieldContainer()); - return visitor.visit(esi.getFieldContainer()); + Map m1 = new LinkedHashMap(esi.getFieldContainer()); + Map m2 = new LinkedHashMap(esio.getFieldContainer()); + dehydrate(m1); + dehydrate(m2); + if (obj1.getClass() == OProcess.class){ + dehydrateOProcess(m1); + dehydrateOProcess(m2); + } + visitor.setOther(m2); + return (Boolean) visitor.getTraverse().traverseObject(m1); + } + private void dehydrateOProcess(Map m) { + m.remove("compileDate"); + } + @SuppressWarnings("rawtypes") + private void dehydrate(Map map) { + if (map == null) return; + Set<Entry> entries = map.entrySet(); + Iterator<Entry> itor = entries.iterator(); + while (itor.hasNext()){ + Entry entry = itor.next(); + if (entry.getValue() == null){ + itor.remove(); + } + } } @Override public Boolean canHanle(Object obj) { http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/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 index b9caa12..972697f 100644 --- 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 @@ -9,4 +9,6 @@ public interface ObjectVisitor { void setTraverse(TraverseObject traverseObject); void addCustomVisitor(Class cls, ObjectVisitor visitor); + + TraverseObject getTraverse(); } http://git-wip-us.apache.org/repos/asf/ode/blob/349eacb9/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 c7caa86..432e2df 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,5 +1,6 @@ package org.apache.ode.bpel.obj.migrate; +import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; @@ -183,7 +184,9 @@ public class OmOld2new extends AbstractObjectVisitor{ String clsName = old.getClass().getName(); String qcls = clsName.replace(".o.", ".obj."); try { - return Class.forName(qcls).newInstance(); + Constructor cons = Class.forName(qcls).getConstructor(); + cons.setAccessible(true); + return cons.newInstance(); } catch (Exception e) { RuntimeException rte = new RuntimeException("Error when try to initiate corresponding new Omodel class of old one:"+old.getClass()); rte.initCause(e);
