You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/03/09 01:20:40 UTC

svn commit: r516236 - /incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/javabeans/JavaBeansDataBinding.java

Author: rfeng
Date: Thu Mar  8 16:20:39 2007
New Revision: 516236

URL: http://svn.apache.org/viewvc?view=rev&rev=516236
Log:
[sca-integration-branch] Fix the build break from PassByValueInterceptor. (missing one class)

Modified:
    incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/javabeans/JavaBeansDataBinding.java

Modified: incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/javabeans/JavaBeansDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/javabeans/JavaBeansDataBinding.java?view=diff&rev=516236&r1=516235&r2=516236
==============================================================================
--- incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/javabeans/JavaBeansDataBinding.java (original)
+++ incubator/tuscany/branches/sca-java-integration/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/javabeans/JavaBeansDataBinding.java Thu Mar  8 16:20:39 2007
@@ -19,6 +19,16 @@
 
 package org.apache.tuscany.core.databinding.javabeans;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.ObjectStreamClass;
+import java.io.OutputStream;
+import java.io.Serializable;
+
 import org.apache.tuscany.spi.databinding.DataBinding;
 import org.apache.tuscany.spi.databinding.extension.DataBindingExtension;
 import org.osoa.sca.annotations.Service;
@@ -38,4 +48,60 @@
     public JavaBeansDataBinding() {
         super(NAME, Object.class);
     }
+    
+    public Object copy(Object arg) {
+        if (arg == null) {
+            return null;
+        }
+        final Class clazz = arg.getClass();
+        if (String.class == clazz || clazz.isPrimitive()
+            || Number.class.isAssignableFrom(clazz)
+            || Boolean.class.isAssignableFrom(clazz)
+            || Character.class.isAssignableFrom(clazz)
+            || Byte.class.isAssignableFrom(clazz)) {
+            // Immutable classes
+            return arg;
+        }
+        try {
+            if (arg instanceof Serializable) {
+                ByteArrayOutputStream bos = new ByteArrayOutputStream();
+                ObjectOutputStream oos = getObjectOutputStream(bos);
+                oos.writeObject(arg);
+                oos.close();
+                bos.close();
+
+                ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());
+                ObjectInputStream ois = getObjectInputStream(bis, clazz.getClassLoader());
+                Object objectCopy = ois.readObject();
+                ois.close();
+                bis.close();
+                return objectCopy;
+            } else {
+                // return arg;
+                throw new IllegalArgumentException("Pass-by-value is not supported for the given object");
+            }
+        } catch (Exception e) {
+            throw new IllegalArgumentException("Pass-by-value is not supported for the given object", e);
+        }
+    }
+
+    protected ObjectOutputStream getObjectOutputStream(OutputStream os) throws IOException {
+        return new ObjectOutputStream(os);
+    }
+
+    protected ObjectInputStream getObjectInputStream(InputStream is, final ClassLoader cl) throws IOException {
+        ObjectInputStream ois = new ObjectInputStream(is) {
+            @Override
+            protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
+                try {
+                    return Class.forName(desc.getName(), false, cl);
+                } catch (ClassNotFoundException e) {
+                    return super.resolveClass(desc);
+                }
+            }
+
+        };
+        return ois;
+    }
+    
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org