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]