summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo')
-rw-r--r--sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java48
-rw-r--r--sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java4
-rw-r--r--sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java8
3 files changed, 53 insertions, 7 deletions
diff --git a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java
index 8c193151f9..23063317e7 100644
--- a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java
+++ b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java
@@ -24,12 +24,15 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Set;
+import javax.xml.datatype.DatatypeFactory;
import javax.xml.namespace.QName;
import org.apache.tuscany.sca.common.java.collection.LRUCache;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.databinding.TransformationContext;
import org.apache.tuscany.sca.databinding.TransformationException;
import org.apache.tuscany.sca.databinding.util.DataTypeHelper;
+import org.apache.tuscany.sca.extensibility.ClassLoaderContext;
import org.apache.tuscany.sca.interfacedef.DataType;
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.interfacedef.util.XMLType;
@@ -48,9 +51,21 @@ import commonj.sdo.impl.HelperProvider;
*/
public final class SDOContextHelper {
private static final LRUCache<Object, HelperContext> cache = new LRUCache<Object, HelperContext>(1024);
+
+ private static ExtensionPointRegistry registry = null;
+ private static HelperContext defaultHelperContext;
private SDOContextHelper() {
}
+
+ /**
+ * Static method used to set the registry used to locate the SDO implementation provider
+ * MUST be called before using any other methods on this class
+ * @param theRegistry
+ */
+ public static void setRegistry( ExtensionPointRegistry theRegistry ) {
+ registry = theRegistry;
+ } // end setRegistry
public static HelperContext getHelperContext(TransformationContext context, boolean source) {
if (context == null) {
@@ -161,10 +176,35 @@ public final class SDOContextHelper {
}
}
- public static HelperContext getDefaultHelperContext() {
- // SDOUtil.createHelperContext();
- return HelperProvider.getDefaultContext();
- }
+ public static HelperContext getDefaultHelperContext( ) {
+ // Return a chached value if available...
+ if( defaultHelperContext != null ) return defaultHelperContext;
+
+ // Try to set up TCCL so that SDO Helper Provider service discovery works in OSGi
+ if( registry == null ) return null;
+
+ ClassLoader oldTccl =
+ ClassLoaderContext.setContextClassLoader(SDOContextHelper.class.getClassLoader(),
+ registry.getServiceDiscovery(),
+ // SDO Helper Provider
+ "commonj.sdo.impl.HelperProvider"
+ );
+ try {
+ // Load the HelperProvider (using the new TCCL) and get the default HelperContext
+ // cache the returned HelperContext...
+ ClassLoader tccl = Thread.currentThread().getContextClassLoader();
+ HelperProvider.setDefaultInstance(tccl);
+ defaultHelperContext = HelperProvider.getDefaultContext();
+ return defaultHelperContext;
+ } catch (Exception e ){
+ e.printStackTrace();
+ return null;
+ } finally {
+ if (oldTccl != null) {
+ Thread.currentThread().setContextClassLoader(oldTccl);
+ }
+ } // end try
+ } // end getDefaultHelperContext()
public static QName getElement(TransformationContext context) {
if (context == null) {
diff --git a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
index 957ba7679b..0003e7d46f 100644
--- a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
+++ b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java
@@ -24,6 +24,7 @@ import java.security.PrivilegedAction;
import javax.xml.namespace.QName;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.databinding.BaseDataBinding;
import org.apache.tuscany.sca.databinding.WrapperHandler;
import org.apache.tuscany.sca.databinding.XMLTypeHelper;
@@ -52,8 +53,9 @@ public class SDODataBinding extends BaseDataBinding {
private WrapperHandler<Object> wrapperHandler;
private XMLTypeHelper xmlTypeHelper;
- public SDODataBinding() {
+ public SDODataBinding( ExtensionPointRegistry registry ) {
super(NAME, DataObject.class);
+ SDOContextHelper.setRegistry( registry );
wrapperHandler = new SDOWrapperHandler();
xmlTypeHelper = new SDOTypeHelper();
}
diff --git a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java
index 1634a73563..381249d9bb 100644
--- a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java
+++ b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java
@@ -30,6 +30,7 @@ import javax.xml.namespace.QName;
import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.databinding.XMLTypeHelper;
import org.apache.tuscany.sca.interfacedef.DataType;
import org.apache.tuscany.sca.interfacedef.Interface;
@@ -62,7 +63,7 @@ public class SDOTypeHelper implements XMLTypeHelper {
// private Map<String, List<Type>> xsdTypesMap = new HashMap<String, List<Type>>();
// private Map<String, List<Type>> typesMap = new HashMap<String, List<Type>>();
- public SDOTypeHelper(ProcessorContext context) {
+ public SDOTypeHelper( ProcessorContext context ) {
super();
this.context=context;
//Should we use this.context to get helper objects ???
@@ -71,11 +72,14 @@ public class SDOTypeHelper implements XMLTypeHelper {
}
//Should we remove this constructor???? otherwise we context gets created
public SDOTypeHelper() {
- super();
+ this(null);
+ /*
+ super();
this.context=null;
//Should we use this.context to get helper objects ???
typeHelper = SDOContextHelper.getDefaultHelperContext().getTypeHelper();
xsdHelper = SDOContextHelper.getDefaultHelperContext().getXSDHelper();
+ */
}
public TypeInfo getTypeInfo(Class javaType, Object logical) {
QName xmlType = JavaXMLMapper.getXMLType(javaType);