You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/05/23 06:10:18 UTC
camel git commit: CAMEL-9982
Repository: camel
Updated Branches:
refs/heads/master c44e7dca7 -> 739a750c0
CAMEL-9982
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/739a750c
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/739a750c
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/739a750c
Branch: refs/heads/master
Commit: 739a750c0b37a5244d459e601903d0491feace3c
Parents: c44e7dc
Author: Arno Noordover <ar...@noordover.net>
Authored: Sun May 22 20:59:10 2016 +0200
Committer: Arno Noordover <ar...@noordover.net>
Committed: Sun May 22 20:59:10 2016 +0200
----------------------------------------------------------------------
.../bindy/BindyAbstractDataFormat.java | 17 +++++++++++
.../bindy/csv/BindyCsvDataFormat.java | 11 +------
.../bindy/fixed/BindyFixedLengthDataFormat.java | 1 +
.../BindySimpleFixedLengthWithLinkTest.java | 32 ++++++++++++++++++++
4 files changed, 51 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/739a750c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
index 9099a46..c55084e 100644
--- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
+++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/BindyAbstractDataFormat.java
@@ -16,9 +16,11 @@
*/
package org.apache.camel.dataformat.bindy;
+import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -28,6 +30,7 @@ import java.util.function.Function;
import org.apache.camel.CamelContext;
import org.apache.camel.CamelContextAware;
import org.apache.camel.dataformat.bindy.annotation.FormatFactories;
+import org.apache.camel.dataformat.bindy.annotation.Link;
import org.apache.camel.dataformat.bindy.format.factories.DefaultFactoryRegistry;
import org.apache.camel.dataformat.bindy.format.factories.FactoryRegistry;
import org.apache.camel.dataformat.bindy.format.factories.FormatFactoryInterface;
@@ -129,6 +132,20 @@ public abstract class BindyAbstractDataFormat extends ServiceSupport implements
this.modelFactory = modelFactory;
}
+ protected Map<String, Object> createLinkedFieldsModel(Object model) throws IllegalAccessException {
+ Map<String, Object> row = new HashMap<>();
+ for (Field field : model.getClass().getDeclaredFields()) {
+ Link linkField = field.getAnnotation(Link.class);
+ if (linkField != null) {
+ boolean accessible = field.isAccessible();
+ field.setAccessible(true);
+ row.put(field.getType().getName(), field.get(model));
+ field.setAccessible(accessible);
+ }
+ }
+ return row;
+ }
+
protected abstract BindyAbstractFactory createModelFactory(FormatFactory formatFactory) throws Exception;
protected Object extractUnmarshalResult(List<Map<String, Object>> models) {
http://git-wip-us.apache.org/repos/asf/camel/blob/739a750c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
index 500afe3..8f986ba 100755
--- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
+++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/csv/BindyCsvDataFormat.java
@@ -91,16 +91,7 @@ public class BindyCsvDataFormat extends BindyAbstractDataFormat {
String name = model.getClass().getName();
Map<String, Object> row = new HashMap<String, Object>(1);
row.put(name, model);
- // search for @Link-ed fields and add them to the model
- for (Field field : model.getClass().getDeclaredFields()) {
- Link linkField = field.getAnnotation(Link.class);
- if (linkField != null) {
- boolean accessible = field.isAccessible();
- field.setAccessible(true);
- row.put(field.getType().getName(), field.get(model));
- field.setAccessible(accessible);
- }
- }
+ row.putAll(createLinkedFieldsModel(model));
models.add(row);
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/739a750c/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java
----------------------------------------------------------------------
diff --git a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java
index 317c659..22efd73 100644
--- a/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java
+++ b/components/camel-bindy/src/main/java/org/apache/camel/dataformat/bindy/fixed/BindyFixedLengthDataFormat.java
@@ -85,6 +85,7 @@ public class BindyFixedLengthDataFormat extends BindyAbstractDataFormat {
String name = model.getClass().getName();
Map<String, Object> row = new HashMap<String, Object>();
row.put(name, model);
+ row.putAll(createLinkedFieldsModel(model));
models.add(row);
}
} else {
http://git-wip-us.apache.org/repos/asf/camel/blob/739a750c/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindySimpleFixedLengthWithLinkTest.java
----------------------------------------------------------------------
diff --git a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindySimpleFixedLengthWithLinkTest.java b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindySimpleFixedLengthWithLinkTest.java
index 323befd..e38b06c 100644
--- a/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindySimpleFixedLengthWithLinkTest.java
+++ b/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/fixed/link/BindySimpleFixedLengthWithLinkTest.java
@@ -28,6 +28,8 @@ import org.apache.camel.model.dataformat.BindyType;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
+import static org.hamcrest.core.Is.is;
+
/**
* This test validates that header and footer records are successfully
* marshalled / unmarshalled in conjunction with the primary data records
@@ -37,11 +39,15 @@ public class BindySimpleFixedLengthWithLinkTest extends CamelTestSupport {
public static final String URI_DIRECT_UNMARSHALL = "direct:unmarshall";
public static final String URI_MOCK_UNMARSHALL_RESULT = "mock:unmarshall-result";
+ public static final String URI_DIRECT_MARSHALL = "direct:marshall";
+ public static final String URI_MOCK_MARSHALL_RESULT = "mock:marshall-result";
private static final String TEST_RECORD = "AAABBBCCC\r\n";
@EndpointInject(uri = URI_MOCK_UNMARSHALL_RESULT)
private MockEndpoint unmarshallResult;
+ @EndpointInject(uri = URI_MOCK_MARSHALL_RESULT)
+ private MockEndpoint marshallResult;
// *************************************************************************
// TESTS
@@ -65,6 +71,28 @@ public class BindySimpleFixedLengthWithLinkTest extends CamelTestSupport {
assertEquals("BBB", order.subRec.fieldB);
}
+ @Test
+ public void testMarshallMessage() throws Exception {
+
+ marshallResult.expectedMessageCount(1);
+
+ Order order = new Order();
+ order.setFieldA("AAA");
+ order.setFieldC("CCC");
+ SubRec subRec = new SubRec();
+ subRec.setFieldB("BBB");
+ order.setSubRec(subRec);
+
+ template.sendBody(URI_DIRECT_MARSHALL, order);
+
+ marshallResult.assertIsSatisfied();
+
+ // check the model
+ Exchange exchange = marshallResult.getReceivedExchanges().get(0);
+ String asString = exchange.getIn().getBody(String.class);
+ assertThat(asString, is("AAABBBCCC\r\n"));
+ }
+
// *************************************************************************
// ROUTES
// *************************************************************************
@@ -83,6 +111,10 @@ public class BindySimpleFixedLengthWithLinkTest extends CamelTestSupport {
from(URI_DIRECT_UNMARSHALL)
.unmarshal(bindy)
.to(URI_MOCK_UNMARSHALL_RESULT);
+
+ from(URI_DIRECT_MARSHALL)
+ .marshal(bindy)
+ .to(URI_MOCK_MARSHALL_RESULT);
}
};