You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by lr...@apache.org on 2009/10/12 07:22:04 UTC

svn commit: r824234 - in /tuscany/branches/sca-java-1.5.2/modules: binding-atom-abdera/src/main/java/org/apache/tuscany/sca/binding/atom/provider/ databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/ databinding/src/main/java/org/apa...

Author: lresende
Date: Mon Oct 12 05:22:04 2009
New Revision: 824234

URL: http://svn.apache.org/viewvc?rev=824234&view=rev
Log:
TUSCANY-3288 - Special handling of arrays to properly create the JAXB Context and minor enhancement on the Atom Binding to avoid data copy

Modified:
    tuscany/branches/sca-java-1.5.2/modules/binding-atom-abdera/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomBindingInvoker.java
    tuscany/branches/sca-java-1.5.2/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
    tuscany/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
    tuscany/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java

Modified: tuscany/branches/sca-java-1.5.2/modules/binding-atom-abdera/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomBindingInvoker.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.5.2/modules/binding-atom-abdera/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomBindingInvoker.java?rev=824234&r1=824233&r2=824234&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.5.2/modules/binding-atom-abdera/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomBindingInvoker.java (original)
+++ tuscany/branches/sca-java-1.5.2/modules/binding-atom-abdera/src/main/java/org/apache/tuscany/sca/binding/atom/provider/AtomBindingInvoker.java Mon Oct 12 05:22:04 2009
@@ -40,6 +40,7 @@
 import org.apache.tuscany.sca.binding.atom.collection.NotFoundException;
 import org.apache.tuscany.sca.data.collection.Entry;
 import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.DataExchangeSemantics;
 import org.apache.tuscany.sca.invocation.Invoker;
 import org.apache.tuscany.sca.invocation.Message;
 import org.osoa.sca.ServiceRuntimeException;
@@ -49,7 +50,7 @@
  * 
  * @version $Rev$ $Date$
  */
-class AtomBindingInvoker implements Invoker {
+class AtomBindingInvoker implements Invoker, DataExchangeSemantics {
     
     private static final Factory abderaFactory = Abdera.getNewFactory();
     private static final Parser abderaParser = Abdera.getNewParser();
@@ -74,6 +75,11 @@
         // by specific invoker subclasses
         throw new UnsupportedOperationException(operation.getName());
     }
+    
+    public boolean allowsPassByReference() {
+        return true;
+    }
+
 
     /**
      * Get operation invoker

Modified: tuscany/branches/sca-java-1.5.2/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.5.2/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java?rev=824234&r1=824233&r2=824234&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.5.2/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java (original)
+++ tuscany/branches/sca-java-1.5.2/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXBContextHelper.java Mon Oct 12 05:22:04 2009
@@ -284,7 +284,7 @@
             }
         } else if (type instanceof GenericArrayType) {
             GenericArrayType gType = (GenericArrayType)type;
-            findClasses(gType, classSet, visited);
+            findClasses(gType.getGenericComponentType(), classSet, visited);
         } else if (type instanceof WildcardType) {
             WildcardType wType = (WildcardType)type;
             for (Type t : wType.getLowerBounds()) {

Modified: tuscany/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java?rev=824234&r1=824233&r2=824234&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java (original)
+++ tuscany/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java Mon Oct 12 05:22:04 2009
@@ -20,6 +20,8 @@
 
 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 @@
     }
 
     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);

Modified: tuscany/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java?rev=824234&r1=824233&r2=824234&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java (original)
+++ tuscany/branches/sca-java-1.5.2/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/MediatorImpl.java Mon Oct 12 05:22:04 2009
@@ -475,12 +475,14 @@
         // 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) {