Author: svkrish
Date: Sat Nov 3 01:28:31 2007
New Revision: 591560
URL: http://svn.apache.org/viewvc?rev=591560&view=rev
Log:
applying patch submitted in https://issues.apache.org/jira/browse/TUSCANY-1887
Added:
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/ResourceReferenceModelResolver.java
incubator/tuscany/java/sca/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiResourceReferenceModelResolver.java
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ResourceReference.java
Modified:
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PropertyUtil.java
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/impl/PojoImplementation.java
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/AbstractStAXArtifactProcessor.java
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/ResourceHelper.java
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementation.java
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/impl/XQueryImplementationImpl.java
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryImplementationProcessor.java
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryIntrospector.java
Modified:
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
(original)
+++
incubator/tuscany/java/sca/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/CompositeDocumentProcessor.java
Sat Nov 3 01:28:31 2007
@@ -22,16 +22,20 @@
import java.io.IOException;
import java.io.InputStream;
import java.net.URI;
+import java.net.URISyntaxException;
import java.net.URL;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.ComponentProperty;
import org.apache.tuscany.sca.assembly.Composite;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.processor.URLArtifactProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ResourceReference;
import org.apache.tuscany.sca.contribution.service.ContributionReadException;
import
org.apache.tuscany.sca.contribution.service.ContributionResolveException;
@@ -107,6 +111,25 @@
public void resolve(Composite composite, ModelResolver resolver) throws
ContributionResolveException {
extensionProcessor.resolve(composite, resolver);
+
+ for (Component component : composite.getComponents()) {
+ for (ComponentProperty prop : component.getProperties()) {
+ String file = prop.getFile();
+ if (file != null) {
+ ResourceReference resourceRef = new
ResourceReference(file);
+ resourceRef =
resolver.resolveModel(ResourceReference.class, resourceRef);
+
+ try {
+ if (!resourceRef.isUnresolved()) {
+
prop.setFile(resourceRef.getResource().toURI().toString());
+
+ }
+ } catch (URISyntaxException e) {
+ throw new IllegalArgumentException(e);
+ }
+ }
+ }
+ }
}
public String getArtifactType() {
Modified:
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PropertyUtil.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PropertyUtil.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PropertyUtil.java
(original)
+++
incubator/tuscany/java/sca/modules/assembly/src/main/java/org/apache/tuscany/sca/assembly/builder/impl/PropertyUtil.java
Sat Nov 3 01:28:31 2007
@@ -89,13 +89,8 @@
static private Document loadFromFile(String file) throws
MalformedURLException, IOException,
TransformerException, ParserConfigurationException {
URI uri = URI.create(file);
- URL url = null;
- if (!uri.isAbsolute()) {
- //FIXME Should already be given an absolute file
- url =
Thread.currentThread().getContextClassLoader().getResource(file);
- } else {
- url = uri.toURL();
- }
+ // URI resolution for relative uris is done when the composite is
resolved.
+ URL url = uri.toURL();
InputStream is = url.openStream();
Source streamSource = new SAXSource(new InputSource(is));
Modified:
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
(original)
+++
incubator/tuscany/java/sca/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassReferenceModelResolver.java
Sat Nov 3 01:28:31 2007
@@ -82,14 +82,18 @@
//Load a class on demand
Class clazz = null;
-
- try {
- clazz = Class.forName(((ClassReference)unresolved).getClassName(),
true, classLoader.get());
- } catch (ClassNotFoundException e) {
- //we will later try to delegate to imported model resolvers
- if (osgiResolver != null) {
- resolved = osgiResolver.resolveModel(modelClass, unresolved);
- clazz = ((ClassReference)resolved).getJavaClass();
+
+ if (osgiResolver != null) {
+ resolved = osgiResolver.resolveModel(modelClass, unresolved);
+ clazz = ((ClassReference)resolved).getJavaClass();
+ }
+
+ if (clazz == null) {
+ try {
+ // Search contribution classloader (which has visibility of
classes in the contribution
+ // as well as explicitly imported packages from other
contributions)
+ clazz =
Class.forName(((ClassReference)unresolved).getClassName(), true,
classLoader.get());
+ } catch (ClassNotFoundException e) {
}
}
Added:
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/ResourceReferenceModelResolver.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/ResourceReferenceModelResolver.java?rev=591560&view=auto
==============================================================================
---
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/ResourceReferenceModelResolver.java
(added)
+++
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/java/org/apache/tuscany/sca/contribution/namespace/impl/ResourceReferenceModelResolver.java
Sat Nov 3 01:28:31 2007
@@ -0,0 +1,117 @@
+/*
+ * 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.contribution.namespace.impl;
+
+import java.io.File;
+import java.lang.ref.WeakReference;
+import java.lang.reflect.Constructor;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.ResourceReference;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+
+/**
+ * A Model Resolver for ResourceReferences.
+ *
+ */
+public class ResourceReferenceModelResolver implements ModelResolver {
+ private Contribution contribution;
+ protected WeakReference<ClassLoader> classLoader;
+ private Map<String, ResourceReference> map = new HashMap<String,
ResourceReference>();
+
+ private ModelResolver osgiResolver;
+
+ public ResourceReferenceModelResolver(Contribution contribution,
ModelFactoryExtensionPoint modelFactories) {
+ this.contribution = contribution;
+ this.classLoader = new
WeakReference<ClassLoader>(this.contribution.getClassLoader());
+
+ try {
+ Class osgiResolverClass =
+
Class.forName("org.apache.tuscany.sca.contribution.osgi.impl.OSGiResourceReferenceModelResolver");
+ if (osgiResolverClass != null) {
+ Constructor constructor =
+ osgiResolverClass.getConstructor(Contribution.class,
ModelFactoryExtensionPoint.class);
+ this.osgiResolver =
(ModelResolver)constructor.newInstance(contribution, modelFactories);
+ }
+ } catch (Exception e) {
+ }
+ }
+
+ public void addModel(Object resolved) {
+ ResourceReference resourceRef = (ResourceReference)resolved;
+ map.put(resourceRef.getResourceName(), resourceRef);
+ }
+
+ public Object removeModel(Object resolved) {
+ return map.remove(((ResourceReference)resolved).getResourceName());
+ }
+
+
+
+ public <T> T resolveModel(Class<T> modelClass, T unresolved) {
+ Object resolved = map.get(unresolved);
+
+ if (resolved != null) {
+ return modelClass.cast(resolved);
+ }
+
+ //Get a resource
+ String resourceName =
((ResourceReference)unresolved).getResourceName();
+ URL resourceURL = null;
+
+ if (URI.create(resourceName).isAbsolute()) {
+ try {
+ File resourceFile = new File(resourceName);
+ if (resourceFile.exists())
+ resourceURL = resourceFile.toURL();
+ } catch (MalformedURLException e) {
+ }
+ }
+
+ if (osgiResolver != null) {
+ resolved = osgiResolver.resolveModel(modelClass, unresolved);
+ resourceURL = ((ResourceReference)resolved).getResource();
+ }
+
+ if (resourceURL == null) {
+ resourceURL = classLoader.get().getResource(resourceName);
+ }
+
+ if (resourceURL != null) {
+ // Store a new ResourceReference wrappering the resource
+ ResourceReference resourceReference = new
ResourceReference(resourceName, resourceURL);
+ map.put(resourceName, resourceReference);
+
+ // Return the resolved ResourceReference
+ return modelClass.cast(resourceReference);
+ } else {
+ return unresolved;
+ }
+
+ }
+
+
+}
Modified:
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-namespace/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
(original)
+++
incubator/tuscany/java/sca/modules/contribution-namespace/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.resolver.ModelResolver
Sat Nov 3 01:28:31 2007
@@ -15,4 +15,4 @@
# specific language governing permissions and limitations
# under the License.
-org.apache.tuscany.sca.contribution.java.impl.ClassReferenceModelResolver;model=org.apache.tuscany.sca.contribution.resolver.ClassReference
+org.apache.tuscany.sca.contribution.namespace.impl.ResourceReferenceModelResolver;model=org.apache.tuscany.sca.contribution.resolver.ResourceReference
Added:
incubator/tuscany/java/sca/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiResourceReferenceModelResolver.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiResourceReferenceModelResolver.java?rev=591560&view=auto
==============================================================================
---
incubator/tuscany/java/sca/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiResourceReferenceModelResolver.java
(added)
+++
incubator/tuscany/java/sca/modules/contribution-osgi/src/main/java/org/apache/tuscany/sca/contribution/osgi/impl/OSGiResourceReferenceModelResolver.java
Sat Nov 3 01:28:31 2007
@@ -0,0 +1,123 @@
+/*
+ * 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.contribution.osgi.impl;
+
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.tuscany.sca.contribution.Contribution;
+import org.apache.tuscany.sca.contribution.Import;
+import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ResourceReference;
+import org.apache.tuscany.sca.osgi.runtime.OSGiRuntime;
+import org.osgi.framework.Bundle;
+
+/**
+ * A Model Resolver for ResourceReferences from OSGi bundles.
+ *
+ */
+public class OSGiResourceReferenceModelResolver implements ModelResolver {
+ private Contribution contribution;
+ private Map<String, ResourceReference> map = new HashMap<String,
ResourceReference>();
+ private Bundle bundle;
+ private boolean initialized;
+
+ public OSGiResourceReferenceModelResolver(Contribution contribution,
ModelFactoryExtensionPoint modelFactories) {
+ this.contribution = contribution;
+ }
+
+ public void addModel(Object resolved) {
+ ResourceReference resourceRef = (ResourceReference)resolved;
+ map.put(resourceRef.getResourceName(), resourceRef);
+ }
+
+ public Object removeModel(Object resolved) {
+ return map.remove(((ResourceReference)resolved).getResourceName());
+ }
+
+ /**
+ * Handle artifact resolution when the specific class reference is
imported from another contribution
+ * @param unresolved
+ * @return
+ */
+ private ResourceReference resolveImportedModel(ResourceReference
unresolved) {
+ ResourceReference resolved = unresolved;
+
+ if (this.contribution != null) {
+ for (Import import_ : this.contribution.getImports()) {
+
+ if (resolved == unresolved && bundle != null) {
+ resolved =
import_.getModelResolver().resolveModel(ResourceReference.class, unresolved);
+ if (resolved != unresolved)
+ break;
+ }
+ }
+
+ }
+ return resolved;
+ }
+
+ public <T> T resolveModel(Class<T> modelClass, T unresolved) {
+ Object resolved = map.get(unresolved);
+
+ if (resolved != null) {
+ return modelClass.cast(resolved);
+ }
+ initialize();
+
+ // Get a resource
+ String resourceName =
((ResourceReference)unresolved).getResourceName();
+ URL resourceURL = null;
+ if (bundle != null) {
+ try {
+ resourceURL = bundle.getResource(resourceName);
+ } catch (Exception e) {
+ // we will later try to delegate to imported model resolvers
+ }
+ }
+
+ if (resourceURL != null) {
+ // Store a new ResourceReference wrappering the resource
+ ResourceReference resourceReference = new
ResourceReference(resourceName, resourceURL);
+ map.put(resourceName, resourceReference);
+
+ // Return the resolved ClassReference
+ return modelClass.cast(resourceReference);
+ } else {
+ //delegate resolution of the class
+ resolved =
this.resolveImportedModel((ResourceReference)unresolved);
+ return modelClass.cast(resolved);
+ }
+
+ }
+
+ private void initialize() {
+ if (initialized)
+ return;
+
+ initialized = true;
+ try {
+ bundle =
OSGiRuntime.findInstalledBundle(contribution.getLocation());
+ } catch (Exception e) {
+ }
+ }
+}
Added:
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ResourceReference.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ResourceReference.java?rev=591560&view=auto
==============================================================================
---
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ResourceReference.java
(added)
+++
incubator/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/resolver/ResourceReference.java
Sat Nov 3 01:28:31 2007
@@ -0,0 +1,100 @@
+/*
+ * 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.contribution.resolver;
+
+import java.net.URL;
+
+/**
+ * A resource URL, which should be used to register resources
+ * with an ArtifactResolver and resolve these resources later.
+ *
+ *
+ */
+public class ResourceReference {
+
+ private URL resourceURL;
+ private String resourceName;
+
+ /**
+ * Constructs a new ResourceReference.
+ *
+ * @param resourceName Name of resource
+ * @param resourceURL The resource url
+ */
+ public ResourceReference(String resourceName, URL resourceURL) {
+ this.resourceURL = resourceURL;
+ this.resourceName = resourceName;
+ }
+
+ /**
+ * Constructs a new ResourceReference.
+ *
+ * @param resourceName Name of resource
+ */
+ public ResourceReference(String resourceName) {
+ this.resourceName = resourceName;
+ }
+
+ /**
+ * Get the resource URL.
+ *
+ * @return The resource URL
+ */
+ public URL getResource() {
+ return resourceURL;
+ }
+
+ /**
+ * Get the resource name.
+ *
+ * @return The resource name
+ */
+ public String getResourceName() {
+ return resourceName;
+ }
+
+ /**
+ * Returns true if the resource reference is unresolved.
+ *
+ * @return Whether or not the resource has been resolved
+ */
+ public boolean isUnresolved() {
+ return resourceURL == null;
+ }
+
+ @Override
+ public int hashCode() {
+ return resourceName.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ if (obj == this) {
+ return true;
+ } else {
+ if (obj instanceof ResourceReference) {
+ return
resourceName.equals(((ResourceReference)obj).resourceName);
+ } else {
+ return false;
+ }
+ }
+ }
+
+}
Modified:
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/TransformationContextImpl.java
Sat Nov 3 01:28:31 2007
@@ -37,7 +37,7 @@
public TransformationContextImpl() {
super();
- //FIXME The classloader should be passed in
+ // This is used only for testing
setClassLoader(Thread.currentThread().getContextClassLoader());
}
Modified:
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/impl/PojoImplementation.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/impl/PojoImplementation.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/impl/PojoImplementation.java
(original)
+++
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/impl/PojoImplementation.java
Sat Nov 3 01:28:31 2007
@@ -19,6 +19,9 @@
package org.apache.tuscany.sca.extension.helper.impl;
+import java.lang.reflect.Method;
+
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
import org.apache.tuscany.sca.extension.helper.utils.DynamicImplementation;
/**
@@ -38,5 +41,16 @@
return userImpl;
}
+ public void resolve(ModelResolver resolver) {
+
+ try {
+ Method resolveMethod;
+ if (userImpl != null &&
+ (resolveMethod =
userImpl.getClass().getMethod("resolve", ModelResolver.class)) != null) {
+ resolveMethod.invoke(userImpl, resolver);
+ }
+ } catch (Exception e) {
+ }
+ }
}
Modified:
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/AbstractStAXArtifactProcessor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/AbstractStAXArtifactProcessor.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/AbstractStAXArtifactProcessor.java
(original)
+++
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/AbstractStAXArtifactProcessor.java
Sat Nov 3 01:28:31 2007
@@ -19,6 +19,8 @@
package org.apache.tuscany.sca.extension.helper.utils;
+import java.lang.reflect.Method;
+
import org.apache.tuscany.sca.assembly.AssemblyFactory;
import org.apache.tuscany.sca.assembly.ComponentType;
import org.apache.tuscany.sca.assembly.Implementation;
@@ -57,6 +59,15 @@
model.getServices().add(dynamicService);
}
}
+
+ // Allow implementation classes to resolve themselves
+ try {
+ Method resolveMethod;
+ if ((resolveMethod = model.getClass().getMethod("resolve",
ModelResolver.class)) != null) {
+ resolveMethod.invoke(model, resolver);
+ }
+ } catch (Exception e) {
+ }
model.setUnresolved(false);
}
Modified:
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/ResourceHelper.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/ResourceHelper.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/ResourceHelper.java
(original)
+++
incubator/tuscany/java/sca/modules/extension-helper/src/main/java/org/apache/tuscany/sca/extension/helper/utils/ResourceHelper.java
Sat Nov 3 01:28:31 2007
@@ -30,15 +30,8 @@
*/
public class ResourceHelper {
- public static String readResource(String scriptName) {
+ public static String readResource(URL scriptSrcUrl) {
- //FIXME The classloader should be passed in
- ClassLoader cl = Thread.currentThread().getContextClassLoader();
- URL scriptSrcUrl = cl.getResource(scriptName);
- if (scriptSrcUrl == null) {
- throw new RuntimeException("No script: " + scriptName);
- }
-
InputStream is;
try {
is = scriptSrcUrl.openStream();
Modified:
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
Sat Nov 3 01:28:31 2007
@@ -61,7 +61,7 @@
private JavaImplementation implementation;
private JavaComponentContextProvider componentContextProvider;
private RequestContextFactory requestContextFactory;
- private Map<QName, String> policyHandlerClassNames = null;
+ private Map<ClassLoader, Map<QName, String>> policyHandlerClassNames =
null;
public JavaImplementationProvider(RuntimeComponent component,
JavaImplementation implementation,
@@ -119,9 +119,9 @@
if ( policyHandlerClassNames == null ) {
Hashtable<ClassLoader, Set<URL>> policySetResources =
ServiceDiscovery.getInstance().getServiceResources("org.apache.tuscany.sca.policy.PolicySetHandlers");
- policyHandlerClassNames = new HashMap<QName, String>();
+ policyHandlerClassNames = new HashMap<ClassLoader, Map<QName,
String>>();
for (ClassLoader classLoader : policySetResources.keySet()) {
-
policyHandlerClassNames.putAll(PolicySetHandlerUtil.getPolicyHandlers(
+ policyHandlerClassNames.put(classLoader,
PolicySetHandlerUtil.getPolicyHandlers(
classLoader,
policySetResources.get(classLoader)));
}
}
@@ -130,14 +130,19 @@
PolicyHandler aHandler = null;
PolicySetAttachPoint policiedImpl =
(PolicySetAttachPoint)implementation;
for ( PolicySet policySet : policiedImpl.getPolicySets() ) {
- String handlerClassName =
policyHandlerClassNames.get(policySet.getName());
-
- if ( handlerClassName != null ) {
- aHandler =
- (PolicyHandler)Class.forName(handlerClassName, true,
Thread.currentThread().getContextClassLoader()).newInstance();
- aHandler.setApplicablePolicySet(policySet);
- javaImpl.getPolicyHandlers().put(policySet, aHandler);
- } else {
+ String handlerClassName = null;
+ for (ClassLoader classLoader :
policyHandlerClassNames.keySet()) {
+ handlerClassName =
policyHandlerClassNames.get(classLoader).get(policySet.getName());
+ if ( handlerClassName != null ) {
+ aHandler =
+ (PolicyHandler)Class.forName(handlerClassName,
true, classLoader).newInstance();
+ aHandler.setApplicablePolicySet(policySet);
+ javaImpl.getPolicyHandlers().put(policySet, aHandler);
+ break;
+ }
+ }
+
+ if (aHandler == null) {
//FIXME : maybe there must be a warning thrown here
}
}
Modified:
incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-script/src/main/java/org/apache/tuscany/sca/implementation/script/ScriptImplementation.java
Sat Nov 3 01:28:31 2007
@@ -18,6 +18,10 @@
*/
package org.apache.tuscany.sca.implementation.script;
+import java.net.URL;
+
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ResourceReference;
import org.apache.tuscany.sca.extension.helper.utils.ResourceHelper;
/**
@@ -26,6 +30,7 @@
public class ScriptImplementation {
protected String scriptName;
+ protected URL scriptURL;
protected String scriptSrc;
protected String scriptLanguage;
@@ -60,10 +65,22 @@
if (scriptName == null) {
throw new IllegalArgumentException("script name is null and no
inline source used");
}
+ if (scriptURL == null) {
+ throw new RuntimeException("No script: " + scriptName);
+ }
- // TODO: how should resources be read? Soould this use the
contrabution sevrice?
- scriptSrc = ResourceHelper.readResource(scriptName);
+ scriptSrc = ResourceHelper.readResource(scriptURL);
}
return scriptSrc;
+ }
+
+ public void resolve(ModelResolver resolver) {
+
+ if (scriptName != null) {
+ ResourceReference resourceRef = new ResourceReference(scriptName);
+ resourceRef = resolver.resolveModel(ResourceReference.class,
resourceRef);
+ if (!resourceRef.isUnresolved())
+ scriptURL = resourceRef.getResource();
+ }
}
}
Modified:
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementation.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementation.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementation.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/XQueryImplementation.java
Sat Nov 3 01:28:31 2007
@@ -19,6 +19,7 @@
package org.apache.tuscany.sca.implementation.xquery;
import java.lang.reflect.Method;
+import java.net.URL;
import java.util.Map;
import net.sf.saxon.query.XQueryExpression;
@@ -38,6 +39,10 @@
public String getLocation();
public void setLocation(String location);
+
+ public URL getLocationURL();
+
+ public void setLocationURL(URL location);
/**
* The XQuery expression that is loaded from the xquery implementation file
Modified:
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/impl/XQueryImplementationImpl.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/impl/XQueryImplementationImpl.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/impl/XQueryImplementationImpl.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/impl/XQueryImplementationImpl.java
Sat Nov 3 01:28:31 2007
@@ -19,6 +19,7 @@
package org.apache.tuscany.sca.implementation.xquery.impl;
import java.lang.reflect.Method;
+import java.net.URL;
import java.util.HashMap;
import java.util.Map;
@@ -34,6 +35,7 @@
public class XQueryImplementationImpl extends ComponentTypeImpl implements
XQueryImplementation {
private String location;
+ private URL locationURL;
private String xqExpression;
private Map<String, XQueryExpression> compiledExpressionsCache = new
HashMap<String, XQueryExpression>();
@@ -49,6 +51,14 @@
public void setLocation(String location) {
this.location = location;
+ }
+
+ public URL getLocationURL() {
+ return locationURL;
+ }
+
+ public void setLocationURL(URL locationURL) {
+ this.locationURL = locationURL;
}
public String getXqExpression() {
Modified:
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryImplementationProcessor.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryImplementationProcessor.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryImplementationProcessor.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryImplementationProcessor.java
Sat Nov 3 01:28:31 2007
@@ -30,6 +30,7 @@
import org.apache.tuscany.sca.contribution.ModelFactoryExtensionPoint;
import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.contribution.resolver.ResourceReference;
import org.apache.tuscany.sca.contribution.service.ContributionReadException;
import
org.apache.tuscany.sca.contribution.service.ContributionResolveException;
import org.apache.tuscany.sca.contribution.service.ContributionWriteException;
@@ -110,6 +111,12 @@
*/
public void resolve(XQueryImplementation xqueryImplementation,
ModelResolver resolver)
throws ContributionResolveException {
+
+ ResourceReference resourceRef = new
ResourceReference(xqueryImplementation.getLocation());
+ resourceRef = resolver.resolveModel(ResourceReference.class,
resourceRef);
+ if (!resourceRef.isUnresolved())
+ throw new ContributionResolveException("Could not locate file:
" + xqueryImplementation.getLocation());
+ xqueryImplementation.setLocationURL(resourceRef.getResource());
XQueryIntrospector introspector = new
XQueryIntrospector(assemblyFactory, javaFactory);
Modified:
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryIntrospector.java
URL:
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryIntrospector.java?rev=591560&r1=591559&r2=591560&view=diff
==============================================================================
---
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryIntrospector.java
(original)
+++
incubator/tuscany/java/sca/modules/implementation-xquery/src/main/java/org/apache/tuscany/sca/implementation/xquery/xml/XQueryIntrospector.java
Sat Nov 3 01:28:31 2007
@@ -19,12 +19,11 @@
package org.apache.tuscany.sca.implementation.xquery.xml;
import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Method;
+import java.net.URL;
import java.util.Iterator;
import javax.xml.namespace.QName;
@@ -74,12 +73,9 @@
public boolean introspect(XQueryImplementation xqueryImplementation)
throws ContributionResolveException {
- //FIXME The classloader should be passed in
- cl = Thread.currentThread().getContextClassLoader();
-
String xqExpression = null;
try {
- xqExpression =
loadXQExpression(xqueryImplementation.getLocation(), cl);
+ xqExpression =
loadXQExpression(xqueryImplementation.getLocationURL());
} catch (FileNotFoundException e) {
throw new ContributionResolveException(e);
} catch (IOException e) {
@@ -124,14 +120,9 @@
/**
* Loads the xquery expression from the location that is provided with the
implementation
*/
- private String loadXQExpression(String location, ClassLoader cl) throws
FileNotFoundException, IOException {
- File locationFile = new File(location);
- InputStream xqResourceStream = null;
- if (locationFile.exists()) {
- xqResourceStream = new FileInputStream(locationFile);
- } else {
- xqResourceStream = cl.getResourceAsStream(location);
- }
+ private String loadXQExpression(URL locationURL) throws
FileNotFoundException, IOException {
+
+ InputStream xqResourceStream = locationURL.openStream();
if (xqResourceStream == null) {
return null;
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]