You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2009/04/06 12:32:16 UTC
svn commit: r762272 - in
/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl:
ClassLoaderModelResolver.java ContributionClassLoader.java
ContributionHelper.java
Author: antelder
Date: Mon Apr 6 10:32:15 2009
New Revision: 762272
URL: http://svn.apache.org/viewvc?rev=762272&view=rev
Log:
Copy zip/folder nested jar support change from 2.x to 1.x
Added:
tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionHelper.java (with props)
Modified:
tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java
tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionClassLoader.java
Modified: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java?rev=762272&r1=762271&r2=762272&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java (original)
+++ tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java Mon Apr 6 10:32:15 2009
@@ -55,8 +55,15 @@
return parentClassLoader;
}
- public ClassLoaderModelResolver(final Contribution contribution, ModelFactoryExtensionPoint modelFactories) throws MalformedURLException {
- super(new URL[] {new URL(contribution.getLocation())}, parentClassLoader());
+ private static URL[] getContributionURLs(final Contribution contribution) throws IOException {
+ List<URL> urls = new ArrayList<URL>();
+ urls.add(new URL(contribution.getLocation()));
+ urls.addAll(ContributionHelper.getNestedJarUrls(contribution));
+ return urls.toArray(new URL[urls.size()]);
+ }
+
+ public ClassLoaderModelResolver(final Contribution contribution, ModelFactoryExtensionPoint modelFactories) throws IOException {
+ super(getContributionURLs(contribution), parentClassLoader());
this.contribution = contribution;
// Index Java import resolvers by package name
Modified: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionClassLoader.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionClassLoader.java?rev=762272&r1=762271&r2=762272&view=diff
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionClassLoader.java (original)
+++ tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionClassLoader.java Mon Apr 6 10:32:15 2009
@@ -25,10 +25,12 @@
import java.net.URLClassLoader;
import java.security.AccessController;
import java.security.PrivilegedAction;
+import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
+import java.util.List;
import org.apache.tuscany.sca.contribution.Contribution;
import org.apache.tuscany.sca.contribution.Export;
@@ -57,7 +59,10 @@
if (contribution.getLocation() != null) {
try {
this.addURL(new URL(contribution.getLocation()));
- } catch (MalformedURLException e) {
+ for (URL url : ContributionHelper.getNestedJarUrls(contribution)) {
+ this.addURL(url);
+ }
+ } catch (IOException e) {
throw new RuntimeException(e);
}
}
Added: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionHelper.java
URL: http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionHelper.java?rev=762272&view=auto
==============================================================================
--- tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionHelper.java (added)
+++ tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionHelper.java Mon Apr 6 10:32:15 2009
@@ -0,0 +1,78 @@
+package org.apache.tuscany.sca.contribution.java.impl;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URI;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import org.apache.tuscany.sca.contribution.Artifact;
+import org.apache.tuscany.sca.contribution.Contribution;
+
+public class ContributionHelper {
+
+ public static List<URL> getNestedJarUrls(final Contribution contribution) throws IOException {
+ List<URL> urls = new ArrayList<URL>();
+ boolean isZipContribution = contribution.getLocation().endsWith(".zip");
+ URI uri = URI.create(contribution.getLocation());
+ boolean isFolderContribution = !isZipContribution && uri.getScheme().equals("file") && new File(uri).isDirectory();
+ if (isZipContribution || isFolderContribution) {
+ for (Artifact a : contribution.getArtifacts()) {
+ if (a.getLocation().endsWith(".jar")) {
+ if (isZipContribution) {
+ urls.add(createTempJar(a, contribution));
+ } else {
+ urls.add(new URL(a.getLocation()));
+ }
+ }
+ }
+ }
+ return urls;
+ }
+
+ /**
+ * URLClassLoader doesn't seem to work with URLs to jars within an archive so as a work around
+ * copy the jar to a temp file and use the url to that.
+ */
+ private static URL createTempJar(Artifact artifact, Contribution contribution) throws IOException {
+ FileOutputStream fileOutputStream = null;
+ ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(new File(URI.create(contribution.getLocation()))));
+ try {
+ ZipEntry zipEntry = zipInputStream.getNextEntry();
+ while (zipEntry != null) {
+ if (artifact.getLocation().endsWith(zipEntry.getName())) {
+
+ String tempName = ("tmp." + artifact.getURI().substring(0, artifact.getURI().length() - 3)).replace('/', '.');
+ File tempFile = File.createTempFile(tempName, ".jar");
+ tempFile.deleteOnExit();
+ fileOutputStream = new FileOutputStream(tempFile);
+
+ byte[] buf = new byte[2048];
+ int n;
+ while ((n = zipInputStream.read(buf, 0, buf.length)) > -1) {
+ fileOutputStream.write(buf, 0, n);
+ }
+
+ fileOutputStream.close();
+ zipInputStream.closeEntry();
+
+ return tempFile.toURI().toURL();
+
+ }
+ zipEntry = zipInputStream.getNextEntry();
+ }
+ } finally {
+ zipInputStream.close();
+ if (fileOutputStream != null) {
+ fileOutputStream.close();
+ }
+ }
+
+ throw new IllegalStateException();
+ }
+}
Propchange: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: tuscany/branches/sca-java-1.x/modules/contribution-java/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ContributionHelper.java
------------------------------------------------------------------------------
svn:keywords = Rev Date