Author: rfeng
Date: Tue Aug 14 15:39:50 2007
New Revision: 565954

URL: http://svn.apache.org/viewvc?view=rev&rev=565954
Log:
Minor cleanup for databinding exception handling

Added:
    
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansExceptionHandler.java
   (with props)
Modified:
    
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
    
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java
    
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java
    
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
    
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java
    
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java

Modified: 
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java?view=diff&rev=565954&r1=565953&r2=565954
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
 Tue Aug 14 15:39:50 2007
@@ -58,11 +58,7 @@
 
     @Override
     public boolean introspect(DataType dataType, Annotation[] annotations) {
-        Object physical = dataType.getPhysical();
-        if (!(physical instanceof Class)) {
-            return false;
-        }
-        Class javaType = (Class)physical;
+        Class javaType = dataType.getPhysical();
         HelperContext context = HelperProvider.getDefaultContext();
         // FIXME: Need a better to test dynamic SDO
         if (DataObject.class.isAssignableFrom(javaType)) {

Modified: 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java?view=diff&rev=565954&r1=565953&r2=565954
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBinding.java
 Tue Aug 14 15:39:50 2007
@@ -56,7 +56,7 @@
     /**
      * Introspect and populate information to a DataType model
      * 
-     * @param javaType The java class or interface to be introspected
+     * @param dataType The data type to be introspected
      * @param annotations The java annotations
      * @return true if the databinding has recognized the given data type
      */

Modified: 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java?view=diff&rev=565954&r1=565953&r2=565954
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DataBindingExtensionPoint.java
 Tue Aug 14 15:39:50 2007
@@ -69,7 +69,7 @@
      * @return A DataType representing the java type or null if no databinding
      *         recognizes the java type
      */
-    boolean introspectType(DataType dataType, Annotation[] annotations, 
boolean exception);
+    boolean introspectType(DataType dataType, Annotation[] annotations, 
boolean isFaultType);
 
     /**
      * Introspect the value to figure out the corresponding DataType

Modified: 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java?view=diff&rev=565954&r1=565953&r2=565954
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultDataBindingExtensionPoint.java
 Tue Aug 14 15:39:50 2007
@@ -39,7 +39,7 @@
 public class DefaultDataBindingExtensionPoint implements 
DataBindingExtensionPoint {
     private final Map<String, DataBinding> bindings = new HashMap<String, 
DataBinding>();
     private boolean loadedDataBindings;
-    
+
     public DefaultDataBindingExtensionPoint() {
     }
 
@@ -90,29 +90,29 @@
 
         // Get the databinding service declarations
         ClassLoader classLoader = DataBinding.class.getClassLoader();
-        Set<String> dataBindingDeclarations; 
+        Set<String> dataBindingDeclarations;
         try {
-            dataBindingDeclarations = 
TempServiceDeclarationUtil.getServiceClassNames(classLoader, 
DataBinding.class.getName());
+            dataBindingDeclarations =
+                TempServiceDeclarationUtil.getServiceClassNames(classLoader, 
DataBinding.class.getName());
         } catch (IOException e) {
             throw new IllegalStateException(e);
         }
-        
+
         // Load data bindings
-        for (String dataBindingDeclaration: dataBindingDeclarations) {
+        for (String dataBindingDeclaration : dataBindingDeclarations) {
             Map<String, String> attributes = 
TempServiceDeclarationUtil.parseServiceDeclaration(dataBindingDeclaration);
             String className = attributes.get("class");
             String type = attributes.get("type");
             String name = attributes.get("name");
-                
+
             // Create a data binding wrapper and register it
             DataBinding dataBinding = new LazyDataBinding(type, name, 
classLoader, className);
             addDataBinding(dataBinding);
         }
-        
+
         loadedDataBindings = true;
     }
 
-    
     /**
      * A data binding facade allowing data bindings to be lazily loaded and
      * initialized.
@@ -120,7 +120,7 @@
     private static class LazyDataBinding implements DataBinding {
 
         private String name;
-        private String[] aliases; 
+        private String[] aliases;
         private WeakReference<ClassLoader> classLoader;
         private String className;
         private DataBinding dataBinding;
@@ -187,7 +187,6 @@
         }
     }
 
-    
     //FIXME The following methods should not be on the extension point
     // they should be on a separate class
     public boolean introspectType(DataType dataType, Annotation[] annotations) 
{
@@ -205,16 +204,21 @@
             // which is java.lang.Object. Default to this only if no 
databinding
             // results
             if (!binding.getName().equals(JavaBeansDataBinding.NAME)) {
-                if (binding.introspect(dataType, annotations)) {
-                    return true;
-                }
                 if (isException) {
                     // Next look to see if the DB's exceptionHandler handles 
this exception
                     ExceptionHandler excHandler = 
binding.getExceptionHandler();
-                    if (excHandler != null && 
excHandler.getFaultType(dataType) != null) {
+                    if (excHandler != null) {
                         // Assymetric to have the introspect() methods set the 
DataBindings themselves
                         // whereas we're setting it ourselves here.   
-                        dataType.setDataBinding(binding.getName());
+                        DataType faultType = excHandler.getFaultType(dataType);
+                        if (faultType != null) {
+                            dataType.setDataBinding(binding.getName());
+                            dataType.setLogical(faultType);
+                            return true;
+                        }
+                    }
+                } else {
+                    if (binding.introspect(dataType, annotations)) {
                         return true;
                     }
                 }
@@ -223,16 +227,13 @@
         // FIXME: Should we honor the databinding from operation/interface
         // level?
         Class physical = dataType.getPhysical();
-        if (physical == Object.class || 
Throwable.class.isAssignableFrom((Class)physical)) {
+        if (physical == Object.class) {
             return false;
         }
         dataType.setDataBinding(JavaBeansDataBinding.NAME);
         return false;
     }
 
-    //
-    // Didn't bother to provide special exc-handling support for this method
-    //
     public DataType introspectType(Object value) {
         loadDataBindings();
         DataType dataType = null;

Modified: 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java?view=diff&rev=565954&r1=565953&r2=565954
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/BaseDataBinding.java
 Tue Aug 14 15:39:50 2007
@@ -19,8 +19,6 @@
 package org.apache.tuscany.sca.databinding.impl;
 
 import java.lang.annotation.Annotation;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
 
 import org.apache.tuscany.sca.databinding.DataBinding;
 import org.apache.tuscany.sca.databinding.ExceptionHandler;
@@ -39,7 +37,7 @@
     private Class<?> baseType;
 
     private String name;
-    private String[] aliases; 
+    private String[] aliases;
 
     /**
      * Create a databinding with the base java type whose name will be used as
@@ -62,7 +60,7 @@
     protected BaseDataBinding(String name, Class<?> baseType) {
         this(name, null, baseType);
     }
-    
+
     /**
      * Create a databinding with the name and base java type
      * 
@@ -75,26 +73,20 @@
         this.name = name;
         this.baseType = baseType;
         this.aliases = aliases;
-    }    
+    }
 
     @SuppressWarnings("unchecked")
     public boolean introspect(DataType type, Annotation[] annotations) {
         assert type != null;
-        Type physical = type.getPhysical();
-        if (physical instanceof ParameterizedType) {
-            physical = ((ParameterizedType)physical).getRawType();
-        }
-        if (physical instanceof Class) {
-            Class cls = (Class)physical;
-            if (baseType != null && baseType.isAssignableFrom(cls)) {
-                type.setDataBinding(getName());
-                type.setLogical(baseType);
-                return true;
-            }
+        Class cls = type.getPhysical();
+        if (baseType != null && baseType.isAssignableFrom(cls)) {
+            type.setDataBinding(getName());
+            type.setLogical(baseType);
+            return true;
         }
         return false;
     }
-    
+
     public DataType introspect(Object value) {
         if (value == null) {
             return null;

Modified: 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java?view=diff&rev=565954&r1=565953&r2=565954
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java
 (original)
+++ 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansDataBinding.java
 Tue Aug 14 15:39:50 2007
@@ -29,6 +29,7 @@
 import java.io.OutputStream;
 import java.io.Serializable;
 
+import org.apache.tuscany.sca.databinding.ExceptionHandler;
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
 
 /**
@@ -81,6 +82,10 @@
         } catch (Exception e) {
             throw new IllegalArgumentException("Pass-by-value is not supported 
for the given object", e);
         }
+    }
+
+    public ExceptionHandler getExceptionHandler() {
+        return new JavaBeansExceptionHandler();
     }
 
     protected ObjectOutputStream getObjectOutputStream(OutputStream os) throws 
IOException {

Added: 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansExceptionHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansExceptionHandler.java?view=auto&rev=565954
==============================================================================
--- 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansExceptionHandler.java
 (added)
+++ 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansExceptionHandler.java
 Tue Aug 14 15:39:50 2007
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.databinding.javabeans;
+
+import org.apache.tuscany.sca.databinding.ExceptionHandler;
+import org.apache.tuscany.sca.interfacedef.DataType;
+
+/**
+ * Simple excecption handler for the JavaBeans data binding.
+ */
+public class JavaBeansExceptionHandler implements ExceptionHandler {
+
+    public Exception createException(DataType<DataType> exceptionType, String 
message, Object faultInfo, Throwable cause) {
+        if (faultInfo instanceof Exception) {
+            return (Exception)faultInfo;
+        }
+        return null;
+    }
+
+    public Object getFaultInfo(Exception exception) {
+        return exception;
+    }
+
+    public DataType<?> getFaultType(DataType exceptionDataType) {
+        // We only handle faults that have been explicitly associated with the
+        // JavaBeansDataBinding by the DefaultDataBindingExtensionPoint.
+        if 
(JavaBeansDataBinding.NAME.equals(exceptionDataType.getDataBinding())) {
+            return exceptionDataType;
+        }
+        return null;
+    }
+
+}

Propchange: 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansExceptionHandler.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBeansExceptionHandler.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to