summaryrefslogtreecommitdiffstats
path: root/branches/sca-java-1.5.2/modules/databinding/src
diff options
context:
space:
mode:
authorlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2009-10-12 05:22:04 +0000
committerlresende <lresende@13f79535-47bb-0310-9956-ffa450edef68>2009-10-12 05:22:04 +0000
commit5c09aba54db57758091cb742f944905c307db277 (patch)
treef0ec042c045a74b965628856ef78719f5e000dfd /branches/sca-java-1.5.2/modules/databinding/src
parent7ad2f1e57e302240584f599185b8c9efcfc66153 (diff)
TUSCANY-3288 - Special handling of arrays to properly create the JAXB Context and minor enhancement on the Atom Binding to avoid data copy
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@824234 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'branches/sca-java-1.5.2/modules/databinding/src')
-rw-r--r--branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java13
-rw-r--r--branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java14
2 files changed, 18 insertions, 9 deletions
diff --git a/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java b/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
index b12d727ba9..e4dd96f68f 100644
--- a/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
+++ b/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
@@ -20,6 +20,8 @@ package org.apache.tuscany.sca.databinding;
import java.io.IOException;
import java.lang.reflect.Constructor;
+import java.lang.reflect.GenericArrayType;
+import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -223,12 +225,17 @@ public class DefaultDataBindingExtensionPoint implements DataBindingExtensionPoi
}
private boolean introspectArray(DataType dataType, Operation operation) {
- Class physical = dataType.getPhysical();
+ Class<?> physical = dataType.getPhysical();
if (!physical.isArray() || physical == byte[].class) {
return false;
}
- Class componentType = physical.getComponentType();
- DataType logical = new DataTypeImpl(componentType, dataType.getLogical());
+ Class<?> componentType = physical.getComponentType();
+ Type genericComponentType = componentType;
+
+ if(dataType.getGenericType() instanceof GenericArrayType) {
+ genericComponentType = ((GenericArrayType) dataType.getGenericType()).getGenericComponentType();
+ }
+ DataType logical = new DataTypeImpl(dataType.getDataBinding(), componentType, genericComponentType, dataType.getLogical());
introspectType(logical, operation);
dataType.setDataBinding("java:array");
dataType.setLogical(logical);
diff --git a/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java b/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java
index d94166588b..1fee253963 100644
--- a/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java
+++ b/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java
@@ -475,12 +475,14 @@ public class MediatorImpl implements Mediator {
// If no databinding was specified, introspect the given arg to
// determine its databinding
if (dataBinding == null) {
- dataType = dataBindings.introspectType(data, operation);
- if (dataType != null) {
- String db = dataType.getDataBinding();
- dataBinding = dataBindings.getDataBinding(db);
- if (dataBinding == null && db != null) {
- return data;
+ if(! "java:array".equals(dataType.getDataBinding())) {
+ dataType = dataBindings.introspectType(data, operation);
+ if (dataType != null) {
+ String db = dataType.getDataBinding();
+ dataBinding = dataBindings.getDataBinding(db);
+ if (dataBinding == null && db != null) {
+ return data;
+ }
}
}
if (dataBinding == null) {