Author: davsclaus
Date: Sun Aug  7 10:31:56 2011
New Revision: 1154684

URL: http://svn.apache.org/viewvc?rev=1154684&view=rev
Log:
CAMEL-4311: Fixed issue with bindy in key value mode when using @OneToMany in 
multi threded unmarshalling. Thanks to Surya for the patch.

Modified:
    
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java
    
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java
    
camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindyComplexOneToManyKeyValuePairUnMarshallTest.java

Modified: 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java?rev=1154684&r1=1154683&r2=1154684&view=diff
==============================================================================
--- 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java
 (original)
+++ 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyKeyValuePairFactory.java
 Sun Aug  7 10:31:56 2011
@@ -51,9 +51,6 @@ public class BindyKeyValuePairFactory ex
     private Map<Integer, KeyValuePairField> keyValuePairFields = new 
LinkedHashMap<Integer, KeyValuePairField>();
     private Map<Integer, Field> annotatedFields = new LinkedHashMap<Integer, 
Field>();
     private Map<String, Integer> sections = new HashMap<String, Integer>();
-
-    private Map<String, List<Object>> lists = new HashMap<String, 
List<Object>>();
-
     private String keyValuePairSeparator;
     private String pairSeparator;
     private boolean messageOrdered;
@@ -117,11 +114,17 @@ public class BindyKeyValuePairFactory ex
         }
     }
 
-    /**
-     * 
-     */
+    @Override
     public void bind(List<String> data, Map<String, Object> model, int line) 
throws Exception {
 
+        // Map to hold the model @OneToMany classes while binding
+        Map<String, List<Object>> lists = new HashMap<String, List<Object>>();
+
+        bind(data, model, line, lists);
+    }
+
+    public void bind(List<String> data, Map<String, Object> model, int line, 
Map<String, List<Object>> lists) throws Exception {
+
         Map<Integer, List<String>> results = new HashMap<Integer, 
List<String>>();
 
         LOG.debug("Key value pairs data : {}", data);
@@ -169,14 +172,14 @@ public class BindyKeyValuePairFactory ex
             if (obj != null) {
 
                 // Generate model from key value map
-                generateModelFromKeyValueMap(clazz, obj, results, line);
+                generateModelFromKeyValueMap(clazz, obj, results, line, lists);
 
             }
         }
 
     }
 
-    private void generateModelFromKeyValueMap(Class clazz, Object obj, 
Map<Integer, List<String>> results, int line) throws Exception {
+    private void generateModelFromKeyValueMap(Class clazz, Object obj, 
Map<Integer, List<String>> results, int line, Map<String, List<Object>> lists) 
throws Exception {
 
         for (Field field : clazz.getDeclaredFields()) {
 
@@ -388,7 +391,7 @@ public class BindyKeyValuePairFactory ex
                         lists.put(cl.getName(), new ArrayList<Object>());
                     }
 
-                    generateModelFromKeyValueMap(cl, null, results, line);
+                    generateModelFromKeyValueMap(cl, null, results, line, 
lists);
 
                     // Add list of objects
                     field.set(obj, lists.get(cl.getName()));
@@ -632,4 +635,5 @@ public class BindyKeyValuePairFactory ex
         }
     }
 
+
 }

Modified: 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java?rev=1154684&r1=1154683&r2=1154684&view=diff
==============================================================================
--- 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java
 (original)
+++ 
camel/trunk/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/kvp/BindyKeyValuePairDataFormat.java
 Sun Aug  7 10:31:56 2011
@@ -21,6 +21,7 @@ import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Scanner;
@@ -79,6 +80,9 @@ public class BindyKeyValuePairDataFormat
 
         // Pojos of the model
         Map<String, Object> model;
+        
+        // Map to hold the model @OneToMany classes while binding
+        Map<String, List<Object>> lists = new HashMap<String, List<Object>>();
 
         InputStreamReader in = new InputStreamReader(inputStream);
 
@@ -117,7 +121,7 @@ public class BindyKeyValuePairDataFormat
                 if (result.size() > 0) {
                     // Bind data from message with model classes
                     // Counter is used to detect line where error occurs
-                    factory.bind(result, model, count);
+                    factory.bind(result, model, count, lists);
 
                     // Link objects together
                     factory.link(model);

Modified: 
camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindyComplexOneToManyKeyValuePairUnMarshallTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindyComplexOneToManyKeyValuePairUnMarshallTest.java?rev=1154684&r1=1154683&r2=1154684&view=diff
==============================================================================
--- 
camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindyComplexOneToManyKeyValuePairUnMarshallTest.java
 (original)
+++ 
camel/trunk/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fix/BindyComplexOneToManyKeyValuePairUnMarshallTest.java
 Sun Aug  7 10:31:56 2011
@@ -33,9 +33,11 @@ public class BindyComplexOneToManyKeyVal
 
         String message = "8=FIX 4.19=2034=135=049=INVMGR56=BRKR" + 
"1=BE.CHM.00111=CHM0001-0158=this is a camel - bindy test" + 
"22=448=BE000124567854=1"
                          + "22=548=BE000987654354=2" + 
"22=648=BE000999999954=3" + "10=220";
+        String message2 = "8=FIX 4.19=2034=135=049=INVMGR56=BRKR" + 
"1=BE.CHM.00111=CHM0001-0158=this is a camel - bindy test10=220";
 
-        result.expectedMessageCount(1);
+        result.expectedMessageCount(2);
         template.sendBody(message);
+        template.sendBody(message2);
 
         result.assertIsSatisfied();
 


Reply via email to