diff options
author | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-12 05:22:04 +0000 |
---|---|---|
committer | lresende <lresende@13f79535-47bb-0310-9956-ffa450edef68> | 2009-10-12 05:22:04 +0000 |
commit | 5c09aba54db57758091cb742f944905c307db277 (patch) | |
tree | f0ec042c045a74b965628856ef78719f5e000dfd /branches/sca-java-1.5.2/modules/databinding/src | |
parent | 7ad2f1e57e302240584f599185b8c9efcfc66153 (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')
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) { |