You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2009/08/04 21:21:26 UTC

svn commit: r800929 - in /tuscany/java/sca/modules: contribution/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/ node-launcher-equinox/src/main/resources/org...

Author: rfeng
Date: Tue Aug  4 19:21:25 2009
New Revision: 800929

URL: http://svn.apache.org/viewvc?rev=800929&view=rev
Log:
Add the capability for equinox node launcher to support customized MANIFEST.MF for 3rd party jars

Added:
    tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/axiom-api-1.2.7.MF
    tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/axis2-kernel-1.4.1.MF
    tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/woden-impl-dom-1.0M8.MF
Modified:
    tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java
    tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java
    tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java

Modified: tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java?rev=800929&r1=800928&r2=800929&view=diff
==============================================================================
--- tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java (original)
+++ tuscany/java/sca/modules/contribution/src/main/java/org/apache/tuscany/sca/contribution/java/impl/ClassLoaderModelResolver.java Tue Aug  4 19:21:25 2009
@@ -51,19 +51,7 @@
         if (contribution.getClassLoader() != null) {
             return contribution.getClassLoader();
         }
-        ClassLoader parentClassLoader = null;
-
-        // FIXME: Need a better way to not use the ThreadContextClassLoader when running in Equinox
-        if (Thread.currentThread().getContextClassLoader() != null) {
-            if (!"org.apache.tuscany.sca.extensibility.equinox.EquinoxServiceDiscoverer".equals(ServiceDiscovery.getInstance().getServiceDiscoverer().getClass().getName())) {
-                parentClassLoader = Thread.currentThread().getContextClassLoader();
-            }
-        }
-        if (parentClassLoader == null) {
-            // The bundle has DynamicImport-Package = *
-            parentClassLoader = ServiceDiscovery.getInstance().getContextClassLoader();
-        }
-
+        ClassLoader parentClassLoader = ServiceDiscovery.getInstance().getContextClassLoader();
         return parentClassLoader;
     }
 

Modified: tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java?rev=800929&r1=800928&r2=800929&view=diff
==============================================================================
--- tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java (original)
+++ tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/EquinoxHost.java Tue Aug  4 19:21:25 2009
@@ -53,6 +53,7 @@
 import java.util.Properties;
 import java.util.Set;
 import java.util.UUID;
+import java.util.jar.Manifest;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -98,7 +99,7 @@
     private Bundle launcherBundle;
     private List<URL> bundleFiles = new ArrayList<URL>();
     private List<String> bundleNames = new ArrayList<String>();
-    private Collection<URL> jarFiles = new HashSet<URL>();
+    private Map<URL, Manifest> jarFiles = new HashMap<URL, Manifest>();
     private Map<String, Bundle> allBundles = new HashMap<String, Bundle>();
     private List<Bundle> installedBundles = new ArrayList<Bundle>();
 
@@ -148,6 +149,34 @@
         }
     }
 
+    
+    /**
+     * Search for org/apache/tuscany/sca/node/equinox/launcher for customized MANIFEST.MF
+     * for a given artifact. For example, a-1.0.MF for a-1.0.jar.
+     * 
+     * @param fileName
+     * @return
+     * @throws IOException
+     */
+    private Manifest getCustomizedMF(String fileName) throws IOException {
+        int index = fileName.lastIndexOf('.');
+        if (index == -1) {
+            return null;
+        }
+        String mf = fileName.substring(0, index) + ".MF";
+        InputStream is = getClass().getResourceAsStream(mf);
+        if (is == null) {
+            return null;
+        } else {
+            try {
+                Manifest manifest = new Manifest(is);
+                return manifest;
+            } finally {
+                is.close();
+            }
+        }
+    }
+
     /**
      * Start the Equinox host.
      *
@@ -238,13 +267,21 @@
             // regular JARs
             for (URL url : urls) {
                 File file = file(url);
-                String bundleName = bundleName(file);
+                Manifest manifest = getCustomizedMF(file.getName());
+                String bundleName = null;
+                if (manifest == null) {
+                    bundleName = bundleName(file);
+                } else {
+                    if (manifest.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME) == null) {
+                        manifest = null;
+                    }
+                }
                 if (bundleName != null) {
                     bundleFiles.add(url);
                     bundleNames.add(bundleName);
                 } else {
                     if (file.isFile()) {
-                        jarFiles.add(url);
+                        jarFiles.put(url, manifest);
                     }
                 }
             }
@@ -287,12 +324,19 @@
             
             Set<String> serviceProviders = new HashSet<String>();
             if (!aggregateThirdPartyJars) {
-                for (URL jarFile : jarFiles) {
-                    Bundle bundle = installAsBundle(jarFile, null);
+                for (Map.Entry<URL, Manifest> entry : jarFiles.entrySet()) {
+                    URL jarFile = entry.getKey();
+                    Manifest manifest = entry.getValue();
+                    Bundle bundle = null;
+                    if (manifest == null) {
+                        bundle = installAsBundle(jarFile, null);
+                    } else {
+                        bundle = installAsBundle(Collections.singleton(jarFile), manifest);
+                    }
                     isServiceProvider(bundle, serviceProviders);
                 }
             } else {
-                Bundle bundle = installAsBundle(jarFiles, LAUNCHER_EQUINOX_LIBRARIES);
+                Bundle bundle = installAsBundle(jarFiles.keySet(), LAUNCHER_EQUINOX_LIBRARIES);
                 isServiceProvider(bundle, serviceProviders);
             }
             
@@ -422,6 +466,24 @@
         }
         return libraryBundle;
     }
+    
+    public Bundle installAsBundle(Collection<URL> jarFiles, Manifest manifest) throws IOException, BundleException {
+        String bundleName = manifest.getMainAttributes().getValue(Constants.BUNDLE_SYMBOLICNAME);
+
+        // Install a single 'library' bundle for the third-party JAR files
+        Bundle libraryBundle = allBundles.get(bundleName);
+        if (libraryBundle == null) {
+            InputStream library = thirdPartyLibraryBundle(jarFiles, manifest);
+            libraryBundle = bundleContext.installBundle(bundleName, library);
+            allBundles.put(bundleName, libraryBundle);
+            installedBundles.add(libraryBundle);
+        } else {
+            if (logger.isLoggable(Level.FINE)) {
+                logger.fine("Third-party library bundle is already installed: " + string(libraryBundle, false));
+            }
+        }
+        return libraryBundle;
+    }
 
     public Bundle installBundle(URL bundleFile, String bundleName) throws MalformedURLException, BundleException {
         if (bundleName == null) {

Modified: tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java?rev=800929&r1=800928&r2=800929&view=diff
==============================================================================
--- tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java (original)
+++ tuscany/java/sca/modules/node-launcher-equinox/src/main/java/org/apache/tuscany/sca/node/equinox/launcher/NodeLauncherUtil.java Tue Aug  4 19:21:25 2009
@@ -537,6 +537,24 @@
         jos.close();
         return new ByteArrayInputStream(bos.toByteArray());
     }
+    
+    static InputStream thirdPartyLibraryBundle(Collection<URL> jarFiles, Manifest manifest) throws IOException {
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        StringBuffer classpath = new StringBuffer();
+        for (URL jarFile : jarFiles) {
+            classpath.append("\"external:");
+            classpath.append(file(jarFile).getPath().replace(File.separatorChar, '/'));
+            classpath.append("\",");
+        }
+
+        if (classpath.length() > 0) {
+            manifest.getMainAttributes().putValue(BUNDLE_CLASSPATH, classpath.substring(0, classpath.length() - 1));
+        }
+
+        JarOutputStream jos = new JarOutputStream(bos, manifest);
+        jos.close();
+        return new ByteArrayInputStream(bos.toByteArray());
+    }
 
     /**
      * Returns the location of this bundle.

Added: tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/axiom-api-1.2.7.MF
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/axiom-api-1.2.7.MF?rev=800929&view=auto
==============================================================================
--- tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/axiom-api-1.2.7.MF (added)
+++ tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/axiom-api-1.2.7.MF Tue Aug  4 19:21:25 2009
@@ -0,0 +1,48 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Axiom API
+Bundle-SymbolicName: org.apache.ws.commons.axiom.axiom-api
+Bundle-Version: 1.2.7
+Bundle-ClassPath: axiom-api-1.2.7.jar
+Bundle-Vendor: Apache Software Foundation
+Export-Package: org.apache.axiom.attachments,
+ org.apache.axiom.attachments.impl,
+ org.apache.axiom.attachments.lifecycle,
+ org.apache.axiom.attachments.lifecycle.impl,
+ org.apache.axiom.attachments.utils,
+ org.apache.axiom.om,
+ org.apache.axiom.om.ds,
+ org.apache.axiom.om.ds.custombuilder,
+ org.apache.axiom.om.impl,
+ org.apache.axiom.om.impl.builder,
+ org.apache.axiom.om.impl.exception,
+ org.apache.axiom.om.impl.serialize,
+ org.apache.axiom.om.impl.traverse,
+ org.apache.axiom.om.impl.util,
+ org.apache.axiom.om.util,
+ org.apache.axiom.om.xpath,
+ org.apache.axiom.soap,
+ org.apache.axiom.soap.impl.builder
+Archiver-Version: Plexus Archiver
+Build-Jdk: 1.5.0_15
+Created-By: Apache Maven
+Bundle-DocURL: http://www.apache.org/
+Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
+Built-By: dims
+Import-Package: javax.activation,
+ javax.mail,
+ javax.mail.internet,
+ javax.xml.namespace,
+ javax.xml.stream,
+ org.apache.axiom.om.impl.dom.factory;resolution:=optional,
+ org.apache.axiom.om.impl.llom.factory;resolution:=optional,
+ org.apache.axiom.soap.impl.dom.factory;resolution:=optional,
+ org.apache.axiom.soap.impl.llom.soap11;resolution:=optional,
+ org.apache.axiom.soap.impl.llom.soap12;resolution:=optional,
+ org.apache.commons.logging,
+ org.jaxen;resolution:=optional,
+ org.jaxen.saxpath;resolution:=optional,
+ org.jaxen.util;resolution:=optional,
+ org.w3c.dom,
+ org.xml.sax,
+ org.xml.sax.helpers

Added: tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/axis2-kernel-1.4.1.MF
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/axis2-kernel-1.4.1.MF?rev=800929&view=auto
==============================================================================
--- tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/axis2-kernel-1.4.1.MF (added)
+++ tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/axis2-kernel-1.4.1.MF Tue Aug  4 19:21:25 2009
@@ -0,0 +1,2 @@
+Manifest-Version: 1.0
+

Added: tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/woden-impl-dom-1.0M8.MF
URL: http://svn.apache.org/viewvc/tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/woden-impl-dom-1.0M8.MF?rev=800929&view=auto
==============================================================================
--- tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/woden-impl-dom-1.0M8.MF (added)
+++ tuscany/java/sca/modules/node-launcher-equinox/src/main/resources/org/apache/tuscany/sca/node/equinox/launcher/woden-impl-dom-1.0M8.MF Tue Aug  4 19:21:25 2009
@@ -0,0 +1,229 @@
+Manifest-Version: 1.0
+Archiver-Version: Plexus Archiver
+Created-By: 1.4.2_17 (Sun Microsystems Inc.)
+Built-By: dims
+Build-Jdk: 1.4.2_17
+Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
+Import-Package: com.ibm.wsdl.util,
+ com.ibm.wsdl.util.xml,
+ javax.wsdl,
+ javax.wsdl.extensions,
+ javax.wsdl.extensions.soap,
+ javax.wsdl.factory,
+ javax.wsdl.xml,
+ javax.xml.namespace,
+ javax.xml.parsers,
+ org.apache.woden;version="1.0",
+ org.apache.woden.internal;version="1.0.0",
+ org.apache.woden.internal.resolver;version="1.0.0",
+ org.apache.woden.internal.schema;version="1.0.0",
+ org.apache.woden.internal.util;version="1.0.0",
+ org.apache.woden.internal.util.dom;version="1.0.0",
+ org.apache.woden.internal.wsdl20;version="1.0.0",
+ org.apache.woden.internal.wsdl20.assertions;version="1.0.0",
+ org.apache.woden.internal.wsdl20.extensions;version="1.0.0",
+ org.apache.woden.internal.wsdl20.extensions.http;version="1.0.0",
+ org.apache.woden.internal.wsdl20.extensions.rpc;version="1.0.0",
+ org.apache.woden.internal.wsdl20.extensions.soap;version="1.0.0",
+ org.apache.woden.internal.wsdl20.validation;version="1.0.0",
+ org.apache.woden.internal.xml;version="1.0.0",
+ org.apache.woden.internal.xpointer;version="1.0.0",
+ org.apache.woden.resolver;version="1.0",
+ org.apache.woden.schema;version="1.0",
+ org.apache.woden.tool.converter;version="1.0.0",
+ org.apache.woden.types;version="1.0",
+ org.apache.woden.wsdl20;version="1.0",
+ org.apache.woden.wsdl20.enumeration;version="1.0",
+ org.apache.woden.wsdl20.extensions;version="1.0",
+ org.apache.woden.wsdl20.extensions.http;version="1.0",
+ org.apache.woden.wsdl20.extensions.rpc;version="1.0",
+ org.apache.woden.wsdl20.extensions.soap;version="1.0",
+ org.apache.woden.wsdl20.fragids;version="1.0",
+ org.apache.woden.wsdl20.validation;version="1.0",
+ org.apache.woden.wsdl20.xml;version="1.0",
+ org.apache.woden.xml;version="1.0",
+ org.apache.woden.xpointer;version="1.0",
+ org.apache.ws.commons.schema,
+ org.apache.ws.commons.schema.resolver,
+ org.apache.ws.commons.schema.utils,
+ org.apache.xerces.parsers,
+ org.apache.xml.serialize,
+ org.w3c.dom,
+ org.xml.sax
+Bnd-LastModified: 1208980539265
+Export-Package: javax.xml.namespace,
+ org.apache.woden.internal;version="1.0.0";
+  uses:="org.apache.woden.wsdl20,
+   org.apache.woden.schema,
+   org.apache.xerces.parsers,
+   javax.xml.namespace,
+   org.apache.woden.xml,
+   org.apache.woden.wsdl20.extensions,
+   org.apache.woden.resolver,
+   org.apache.woden.internal.schema,
+   javax.xml.parsers,
+   org.apache.woden.wsdl20.xml,
+   org.xml.sax,
+   org.apache.ws.commons.schema,
+   org.w3c.dom,
+   org.apache.woden,
+   org.apache.woden.internal.wsdl20,
+   org.apache.woden.internal.xpointer,
+   org.apache.woden.internal.util.dom,
+   org.apache.ws.commons.schema.resolver,
+   org.apache.woden.internal.wsdl20.extensions,
+   org.apache.woden.xpointer,
+   org.apache.woden.internal.wsdl20.validation,
+   org.apache.woden.wsdl20.enumeration,
+   org.apache.woden.types,
+   org.apache.woden.internal.resolver,
+   org.apache.woden.internal.util",
+ org.apache.woden.internal.resolver;version="1.0.0";
+  uses:="org.apache.ws.commons.schema.resolver,
+   org.xml.sax,
+   org.apache.xml.serialize,
+   org.w3c.dom,
+   org.apache.woden,
+   org.apache.woden.resolver,
+   org.apache.woden.internal.util",
+ org.apache.woden.internal.schema;version="1.0.0";
+  uses:="org.apache.woden.schema,
+   org.apache.ws.commons.schema,
+   javax.xml.namespace,
+   org.apache.woden",
+ org.apache.woden.internal.util;version="1.0.0",
+ org.apache.woden.internal.util.dom;version="1.0.0";
+  uses:="javax.xml.namespace,
+   org.w3c.dom,
+   org.apache.woden,
+   org.apache.woden.internal.util",
+ org.apache.woden.internal.wsdl20;version="1.0.0";
+  uses:="org.apache.woden.wsdl20,
+   org.apache.woden.schema,
+   org.apache.woden.wsdl20.extensions.rpc,
+   org.apache.ws.commons.schema,
+   javax.xml.namespace,
+   org.apache.woden.xml,
+   org.apache.woden,
+   org.apache.woden.wsdl20.extensions,
+   org.apache.woden.wsdl20.fragids,
+   org.apache.woden.internal,
+   org.apache.woden.internal.wsdl20.extensions,
+   org.apache.ws.commons.schema.utils,
+   org.apache.woden.internal.schema,
+   org.apache.woden.wsdl20.enumeration,
+   org.apache.woden.wsdl20.xml,
+   org.apache.woden.types",
+ org.apache.woden.internal.wsdl20.assertions;version="1.0.0";
+  uses:="org.apache.woden.wsdl20,
+   org.apache.woden.wsdl20.validation,
+   javax.xml.namespace,
+   org.apache.woden.wsdl20.xml,
+   org.apache.woden,
+   org.apache.woden.resolver,
+   org.apache.woden.internal",
+ org.apache.woden.internal.wsdl20.extensions;version="1.0.0";
+  uses:="org.apache.woden.wsdl20,
+   org.apache.woden.wsdl20.extensions.http,
+   org.apache.woden.internal.wsdl20.extensions.http,
+   org.apache.woden.internal.xml,
+   org.apache.woden.internal.wsdl20.extensions.soap,
+   org.apache.woden.wsdl20.extensions.rpc,
+   javax.xml.namespace,
+   org.apache.woden.xml,
+   org.apache.woden,
+   org.apache.woden.wsdl20.extensions,
+   org.apache.woden.internal.wsdl20.extensions.rpc,
+   org.apache.woden.wsdl20.xml,
+   org.apache.woden.wsdl20.extensions.soap,
+   org.apache.woden.internal.util",
+ org.apache.woden.internal.wsdl20.extensions.http;version="1.0.0";
+  uses:="org.apache.woden.wsdl20,
+   org.apache.woden.wsdl20.extensions.http,
+   org.apache.woden.internal.xml,
+   org.apache.ws.commons.schema,
+   javax.xml.namespace,
+   org.apache.woden.xml,
+   org.apache.woden.internal.wsdl20,
+   org.apache.woden,
+   org.apache.woden.wsdl20.extensions,
+   org.apache.woden.internal,
+   org.apache.woden.internal.wsdl20.extensions,
+   org.apache.woden.wsdl20.xml",
+ org.apache.woden.internal.wsdl20.extensions.rpc;version="1.0.0";
+  uses:="org.apache.woden.wsdl20,
+   org.apache.woden.wsdl20.extensions.rpc,
+   javax.xml.namespace,
+   org.apache.woden.xml,
+   org.apache.woden.wsdl20.xml,
+   org.apache.woden,
+   org.apache.woden.wsdl20.extensions",
+ org.apache.woden.internal.wsdl20.extensions.soap;version="1.0.0";
+  uses:="org.apache.woden.wsdl20,
+   org.apache.woden.wsdl20.extensions.http,
+   org.apache.woden.internal.xml,
+   org.apache.ws.commons.schema,
+   javax.xml.namespace,
+   org.apache.woden.xml,
+   org.apache.woden,
+   org.apache.woden.internal.wsdl20,
+   org.apache.woden.wsdl20.extensions,
+   org.apache.woden.internal,
+   org.apache.woden.internal.wsdl20.extensions,
+   org.apache.woden.wsdl20.xml,
+   org.apache.woden.wsdl20.extensions.soap",
+ org.apache.woden.internal.wsdl20.validation;version="1.0.0";
+  uses:="org.apache.woden.wsdl20,
+   org.apache.woden.wsdl20.validation,
+   org.apache.woden.schema,
+   org.apache.woden.internal.wsdl20.assertions,
+   org.apache.ws.commons.schema,
+   javax.xml.namespace,
+   org.apache.woden,
+   org.apache.woden.wsdl20.extensions,
+   org.apache.woden.resolver,
+   org.apache.woden.internal,
+   org.apache.woden.types,
+   org.apache.woden.wsdl20.xml",
+ org.apache.woden.internal.xml;version="1.0.0";
+  uses:="org.apache.woden.wsdl20.extensions.http,
+   org.apache.woden.wsdl20.extensions.rpc,
+   javax.xml.namespace,
+   org.apache.woden.xml,
+   org.apache.woden,
+   org.apache.woden.internal.util,
+   org.apache.woden.internal",
+ org.apache.woden.internal.xpointer;version="1.0.0";
+  uses:="org.apache.woden.xpointer,
+   org.apache.woden.types,
+   org.w3c.dom,
+   org.apache.woden,
+   org.apache.woden.internal",
+ org.apache.woden.tool.converter;version="1.0.0";
+  uses:="javax.wsdl,
+   javax.wsdl.extensions,
+   javax.wsdl.extensions.soap,
+   javax.wsdl.xml,
+   javax.wsdl.factory,
+   javax.xml.namespace,
+   com.ibm.wsdl.util,
+   com.ibm.wsdl.util.xml"
+Bundle-Version: 1.0.0
+Bundle-Description: The Woden project is a subproject of the Apache We
+ b Services Project to    develop a Java class library for reading, ma
+ nipulating, creating and writing WSDL documents,    initially to supp
+ ort WSDL 2.0 but with the longer term aim of supporting past, present
+  and    future versions of WSDL.    There are two main deliverables: 
+ an API and an implementation. The Woden API consists of    a set of J
+ ava interfaces. The WSDL 2.0-specific portion of the Woden API confor
+ ms to the    W3C WSDL 2.0 specification. The implementation will be a
+  high performance implementation    directly usable in other Apache p
+ rojects such as Axis2.
+Bundle-Name: Woden - DOM
+Bundle-DocURL: http://www.apache.org/
+Bundle-ManifestVersion: 2
+Bundle-Vendor: Apache Software Foundation
+Bundle-SymbolicName: org.apache.woden.woden-impl-dom
+Tool: Bnd-0.0.238
+
+