[jboss-cvs] JBossAS SVN: r91496 - in projects/jboss-osgi: projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/apache and 10 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jul 21 10:48:51 EDT 2009


Author: thomas.diesler at jboss.com
Date: 2009-07-21 10:48:51 -0400 (Tue, 21 Jul 2009)
New Revision: 91496

Added:
   projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/internal/
   projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/internal/LoggingXMLParserActivator.java
   projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/internal/XMLParserActivator.java
Removed:
   projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/apache/xerces/
   projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/EndpointService.java
Modified:
   projects/jboss-osgi/projects/bundles/apache-xerces/trunk/pom.xml
   projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/XMLParserActivatorExt.java
   projects/jboss-osgi/projects/runtime/jbossas/trunk/.classpath
   projects/jboss-osgi/projects/runtime/jbossas/trunk/pom.xml
   projects/jboss-osgi/projects/runtime/jbossas/trunk/src/main/java/org/jboss/osgi/microcontainer/integration/MicrocontainerServiceBean.java
   projects/jboss-osgi/projects/runtime/jbossas/trunk/src/main/resources/jboss-beans-felix.xml
   projects/jboss-osgi/trunk/reactor/
   projects/jboss-osgi/trunk/reactor/blueprint/testsuite/pom.xml
   projects/jboss-osgi/trunk/reactor/pom.xml
   projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/HttpExampleActivator.java
   projects/jboss-osgi/trunk/testsuite/example/src/test/resources/xml/jaxb/example-xml-jaxb.bnd
   projects/jboss-osgi/trunk/testsuite/example/src/test/resources/xml/parser/example-xml-parser.bnd
Log:
[JBOSGI-92] XMLParserActivator in compendium cannot load SAXParserFactory
WIP

Modified: projects/jboss-osgi/projects/bundles/apache-xerces/trunk/pom.xml
===================================================================
--- projects/jboss-osgi/projects/bundles/apache-xerces/trunk/pom.xml	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/projects/bundles/apache-xerces/trunk/pom.xml	2009-07-21 14:48:51 UTC (rev 91496)
@@ -89,10 +89,10 @@
         <configuration>
           <instructions>
             <Bundle-SymbolicName>${artifactId}</Bundle-SymbolicName>
-            <Bundle-Activator>org.jboss.osgi.xml.XMLParserActivatorExt</Bundle-Activator>
+            <Bundle-Activator>org.jboss.osgi.xml.internal.LoggingXMLParserActivator</Bundle-Activator>
             <Bundle-ActivationPolicy>lazy</Bundle-ActivationPolicy>
             <Private-Package>
-              org.jboss.osgi.apache.xerces.internal
+              org.jboss.osgi.xml.internal
             </Private-Package>
             <Export-Package>
               org.jboss.osgi.xml;version=${version}

Modified: projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/XMLParserActivatorExt.java
===================================================================
--- projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/XMLParserActivatorExt.java	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/XMLParserActivatorExt.java	2009-07-21 14:48:51 UTC (rev 91496)
@@ -28,11 +28,7 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.SAXParserFactory;
 
-import org.jboss.osgi.common.log.LogServiceTracker;
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.log.LogService;
-import org.osgi.util.xml.XMLParserActivator;
+import org.jboss.osgi.xml.internal.XMLParserActivator;
 
 /**
  * Activate the XML parser using {@link XMLParserActivatorExt}
@@ -42,23 +38,12 @@
  */
 public class XMLParserActivatorExt extends XMLParserActivator
 {
-   private LogService log;
-   
    /*
     * Service property specifying if factory is configured to support XInclude aware parsers. 
     * The value is of type <code>Boolean</code>.
     */
    public static final String PARSER_XINCLUDEAWARE = "parser.xincludeAware";
    
-   public void start(BundleContext context) throws Exception
-   {
-      log = new LogServiceTracker(context);
-      super.start(context);
-      logSAXParserFactory(context);
-      logDOMParserFactory(context);
-   }
-
-   
    @Override
    @SuppressWarnings("unchecked")
    public void setDOMProperties(DocumentBuilderFactory factory, Hashtable props)
@@ -169,45 +154,4 @@
       props.put(PARSER_VALIDATING, new Boolean(validating));
       props.put(PARSER_XINCLUDEAWARE, new Boolean(xinclude));
    }
-
-
-   private void logSAXParserFactory(BundleContext context)
-   {
-      ServiceReference saxRef = context.getServiceReference(SAXParserFactory.class.getName());
-      if (saxRef != null)
-      {
-         Object factory = context.getService(saxRef);
-         log.log(LogService.LOG_DEBUG, "SAXParserFactory: " + factory.getClass().getName());
-         
-         for (String key : saxRef.getPropertyKeys())
-         {
-            Object value = saxRef.getProperty(key);
-            log.log(LogService.LOG_DEBUG, "   " + key + "=" + value);
-         }
-      }
-      else
-      {
-         log.log(LogService.LOG_WARNING, "No SAXParserFactory registered");
-      }
-   }
-
-   private void logDOMParserFactory(BundleContext context)
-   {
-      ServiceReference domRef = context.getServiceReference(DocumentBuilderFactory.class.getName());
-      if (domRef != null)
-      {
-         Object factory = context.getService(domRef);
-         log.log(LogService.LOG_DEBUG, "DocumentBuilderFactory: " + factory.getClass().getName());
-         
-         for (String key : domRef.getPropertyKeys())
-         {
-            Object value = domRef.getProperty(key);
-            log.log(LogService.LOG_DEBUG, "   " + key + "=" + value);
-         }
-      }
-      else
-      {
-         log.log(LogService.LOG_WARNING, "No DocumentBuilderFactory registered");
-      }
-   }
 }
\ No newline at end of file

Added: projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/internal/LoggingXMLParserActivator.java
===================================================================
--- projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/internal/LoggingXMLParserActivator.java	                        (rev 0)
+++ projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/internal/LoggingXMLParserActivator.java	2009-07-21 14:48:51 UTC (rev 91496)
@@ -0,0 +1,95 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2005, JBoss Inc., and individual contributors as indicated
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.osgi.xml.internal;
+
+//$Id: XMLParserActivatorExt.java 91495 2009-07-21 13:54:45Z thomas.diesler at jboss.com $
+
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.SAXParserFactory;
+
+import org.jboss.osgi.common.log.LogServiceTracker;
+import org.jboss.osgi.xml.XMLParserActivatorExt;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.log.LogService;
+
+/**
+ * Activate the XML parser using {@link LoggingXMLParserActivator}
+ * 
+ * @author thomas.diesler at jboss.com
+ * @since 29-Apr-2009
+ */
+public class LoggingXMLParserActivator extends XMLParserActivatorExt
+{
+   private LogService log;
+   
+   public void start(BundleContext context) throws Exception
+   {
+      log = new LogServiceTracker(context);
+      
+      super.start(context);
+      
+      logSAXParserFactory(context);
+      logDOMParserFactory(context);
+   }
+
+
+   private void logSAXParserFactory(BundleContext context)
+   {
+      ServiceReference saxRef = context.getServiceReference(SAXParserFactory.class.getName());
+      if (saxRef != null)
+      {
+         Object factory = context.getService(saxRef);
+         log.log(LogService.LOG_DEBUG, "SAXParserFactory: " + factory.getClass().getName());
+         
+         for (String key : saxRef.getPropertyKeys())
+         {
+            Object value = saxRef.getProperty(key);
+            log.log(LogService.LOG_DEBUG, "   " + key + "=" + value);
+         }
+      }
+      else
+      {
+         log.log(LogService.LOG_WARNING, "No SAXParserFactory registered");
+      }
+   }
+
+   private void logDOMParserFactory(BundleContext context)
+   {
+      ServiceReference domRef = context.getServiceReference(DocumentBuilderFactory.class.getName());
+      if (domRef != null)
+      {
+         Object factory = context.getService(domRef);
+         log.log(LogService.LOG_DEBUG, "DocumentBuilderFactory: " + factory.getClass().getName());
+         
+         for (String key : domRef.getPropertyKeys())
+         {
+            Object value = domRef.getProperty(key);
+            log.log(LogService.LOG_DEBUG, "   " + key + "=" + value);
+         }
+      }
+      else
+      {
+         log.log(LogService.LOG_WARNING, "No DocumentBuilderFactory registered");
+      }
+   }
+}
\ No newline at end of file

Added: projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/internal/XMLParserActivator.java
===================================================================
--- projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/internal/XMLParserActivator.java	                        (rev 0)
+++ projects/jboss-osgi/projects/bundles/apache-xerces/trunk/src/main/java/org/jboss/osgi/xml/internal/XMLParserActivator.java	2009-07-21 14:48:51 UTC (rev 91496)
@@ -0,0 +1,527 @@
+/*
+ * $Header: /cvshome/build/org.osgi.util.xml/src/org/osgi/util/xml/XMLParserActivator.java,v 1.11 2006/10/27 18:17:06 hargrave Exp $
+ * 
+ * Copyright (c) OSGi Alliance (2002, 2006). All Rights Reserved.
+ * 
+ * Licensed 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.jboss.osgi.xml.internal;
+
+import java.io.*;
+import java.net.URL;
+import java.util.*;
+
+import javax.xml.parsers.*;
+
+import org.osgi.framework.*;
+
+/**
+ * A BundleActivator class that allows any JAXP compliant XML Parser to register
+ * itself as an OSGi parser service.
+ * 
+ * Multiple JAXP compliant parsers can concurrently register by using this
+ * BundleActivator class. Bundles who wish to use an XML parser can then use the
+ * framework's service registry to locate available XML Parsers with the desired
+ * characteristics such as validating and namespace-aware.
+ * 
+ * <p>
+ * The services that this bundle activator enables a bundle to provide are:
+ * <ul>
+ * <li><code>javax.xml.parsers.SAXParserFactory</code>({@link #SAXFACTORYNAME})
+ * <li><code>javax.xml.parsers.DocumentBuilderFactory</code>(
+ * {@link #DOMFACTORYNAME})
+ * </ul>
+ * 
+ * <p>
+ * The algorithm to find the implementations of the abstract parsers is derived
+ * from the JAR file specifications, specifically the Services API.
+ * <p>
+ * An XMLParserActivator assumes that it can find the class file names of the
+ * factory classes in the following files:
+ * <ul>
+ * <li><code>/META-INF/services/javax.xml.parsers.SAXParserFactory</code> is
+ * a file contained in a jar available to the runtime which contains the
+ * implementation class name(s) of the SAXParserFactory.
+ * <li><code>/META-INF/services/javax.xml.parsers.DocumentBuilderFactory</code>
+ * is a file contained in a jar available to the runtime which contains the
+ * implementation class name(s) of the <code>DocumentBuilderFactory</code>
+ * </ul>
+ * <p>
+ * If either of the files does not exist, <code>XMLParserActivator</code>
+ * assumes that the parser does not support that parser type.
+ * 
+ * <p>
+ * <code>XMLParserActivator</code> attempts to instantiate both the
+ * <code>SAXParserFactory</code> and the <code>DocumentBuilderFactory</code>.
+ * It registers each factory with the framework along with service properties:
+ * <ul>
+ * <li>{@link #PARSER_VALIDATING}- indicates if this factory supports
+ * validating parsers. It's value is a <code>Boolean</code>.
+ * <li>{@link #PARSER_NAMESPACEAWARE}- indicates if this factory supports
+ * namespace aware parsers It's value is a <code>Boolean</code>.
+ * </ul>
+ * <p>
+ * Individual parser implementations may have additional features, properties,
+ * or attributes which could be used to select a parser with a filter. These can
+ * be added by extending this class and overriding the
+ * <code>setSAXProperties</code> and <code>setDOMProperties</code> methods.
+ */
+public class XMLParserActivator implements BundleActivator, ServiceFactory {
+   /** Context of this bundle */
+   private BundleContext      context;
+   /**
+    * Filename containing the SAX Parser Factory Class name. Also used as the
+    * basis for the <code>SERVICE_PID<code> registration property.
+    */
+   public static final String SAXFACTORYNAME       = "javax.xml.parsers.SAXParserFactory";
+   /**
+    * Filename containing the DOM Parser Factory Class name. Also used as the
+    * basis for the <code>SERVICE_PID</code> registration property.
+    */
+   public static final String DOMFACTORYNAME       = "javax.xml.parsers.DocumentBuilderFactory";
+   /** Path to the factory class name files */
+   private static final String   PARSERCLASSFILEPATH     = "/META-INF/services/";
+   /** Fully qualified path name of SAX Parser Factory Class Name file */
+   public static final String SAXCLASSFILE         = PARSERCLASSFILEPATH
+                                                + SAXFACTORYNAME;
+   /** Fully qualified path name of DOM Parser Factory Class Name file */
+   public static final String DOMCLASSFILE         = PARSERCLASSFILEPATH
+                                                + DOMFACTORYNAME;
+   /** SAX Factory Service Description */
+   private static final String   SAXFACTORYDESCRIPTION   = "A JAXP Compliant SAX Parser";
+   /** DOM Factory Service Description */
+   private static final String   DOMFACTORYDESCRIPTION   = "A JAXP Compliant DOM Parser";
+   /**
+    * Service property specifying if factory is configured to support
+    * validating parsers. The value is of type <code>Boolean</code>.
+    */
+   public static final String PARSER_VALIDATING    = "parser.validating";
+   /**
+    * Service property specifying if factory is configured to support namespace
+    * aware parsers. The value is of type <code>Boolean</code>.
+    */
+   public static final String PARSER_NAMESPACEAWARE   = "parser.namespaceAware";
+   /**
+    * Key for parser factory name property - this must be saved in the parsers
+    * properties hashtable so that the parser factory can be instantiated from
+    * a ServiceReference
+    */
+   private static final String   FACTORYNAMEKEY       = "parser.factoryname";
+
+   /**
+    * Called when this bundle is started so the Framework can perform the
+    * bundle-specific activities necessary to start this bundle. This method
+    * can be used to register services or to allocate any resources that this
+    * bundle needs.
+    * 
+    * <p>
+    * This method must complete and return to its caller in a timely manner.
+    * 
+    * <p>
+    * This method attempts to register a SAX and DOM parser with the
+    * Framework's service registry.
+    * 
+    * @param context The execution context of the bundle being started.
+    * @throws java.lang.Exception If this method throws an exception, this
+    *         bundle is marked as stopped and the Framework will remove this
+    *         bundle's listeners, unregister all services registered by this
+    *         bundle, and release all services used by this bundle.
+    */
+   public void start(BundleContext context) throws Exception {
+      this.context = context;
+      Bundle parserBundle = context.getBundle();
+      try {
+         // check for sax parsers
+         registerSAXParsers(getParserFactoryClassNames(parserBundle
+               .getResource(SAXCLASSFILE)));
+         // check for dom parsers
+         registerDOMParsers(getParserFactoryClassNames(parserBundle
+               .getResource(DOMCLASSFILE)));
+      }
+      catch (IOException ioe) {
+         // if there were any IO errors accessing the resource files
+         // containing the class names
+         ioe.printStackTrace();
+         throw new FactoryConfigurationError(ioe);
+      }
+   }
+
+   /**
+    * This method has nothing to do as all active service registrations will
+    * automatically get unregistered when the bundle stops.
+    * 
+    * @param context The execution context of the bundle being stopped.
+    * @throws java.lang.Exception If this method throws an exception, the
+    *         bundle is still marked as stopped, and the Framework will remove
+    *         the bundle's listeners, unregister all services registered by the
+    *         bundle, and release all services used by the bundle.
+    */
+   public void stop(BundleContext context) throws Exception {
+   }
+
+   /**
+    * Given the URL for a file, reads and returns the parser class names. There
+    * may be multiple classes specified in this file, one per line. There may
+    * also be comment lines in the file, which begin with "#".
+    * 
+    * @param parserUrl The URL of the service file containing the parser class
+    *        names
+    * @return A vector of strings containing the parser class names or null if
+    *         parserUrl is null
+    * @throws IOException if there is a problem reading the URL input stream
+    */
+   private Vector getParserFactoryClassNames(URL parserUrl) throws IOException {
+      Vector v = new Vector(1);
+      if (parserUrl != null) {
+         String parserFactoryClassName = null;
+         InputStream is = parserUrl.openStream();
+         BufferedReader br = new BufferedReader(new InputStreamReader(is));
+         while (true) {
+            parserFactoryClassName = br.readLine();
+            if (parserFactoryClassName == null) {
+               break; // end of file reached
+            }
+            String pfcName = parserFactoryClassName.trim();
+            if (pfcName.length() == 0) {
+               continue; // blank line
+            }
+            int commentIdx = pfcName.indexOf("#");
+            if (commentIdx == 0) { // comment line
+               continue;
+            }
+            else
+               if (commentIdx < 0) { // no comment on this line
+                  v.addElement(pfcName);
+               }
+               else {
+                  v.addElement(pfcName.substring(0, commentIdx).trim());
+               }
+         }
+         return v;
+      }
+      else {
+         return null;
+      }
+   }
+
+   /**
+    * Register SAX Parser Factory Services with the framework.
+    * 
+    * @param parserFactoryClassNames - a <code>Vector</code> of
+    *        <code>String</code> objects containing the names of the parser
+    *        Factory Classes
+    * @throws FactoryConfigurationError if thrown from <code>getFactory</code>
+    */
+   private void registerSAXParsers(Vector parserFactoryClassNames)
+         throws FactoryConfigurationError {
+      if (parserFactoryClassNames != null) {
+         Enumeration e = parserFactoryClassNames.elements();
+         int index = 0;
+         while (e.hasMoreElements()) {
+            String parserFactoryClassName = (String) e.nextElement();
+            // create a sax parser factory just to get it's default
+            // properties. It will never be used since
+            // this class will operate as a service factory and give each
+            // service requestor it's own SaxParserFactory
+            SAXParserFactory factory = (SAXParserFactory) getFactory(parserFactoryClassName);
+            Hashtable properties = new Hashtable(7);
+            // figure out the default properties of the parser
+            setDefaultSAXProperties(factory, properties, index);
+            // store the parser factory class name in the properties so that
+            // it can be retrieved when getService is called
+            // to return a parser factory
+            properties.put(FACTORYNAMEKEY, parserFactoryClassName);
+            // release the factory
+            factory = null;
+            // register the factory as a service
+            context.registerService(SAXFACTORYNAME, this, properties);
+            index++;
+         }
+      }
+   }
+
+   /**
+    * <p>
+    * Set the SAX Parser Service Properties. By default, the following
+    * properties are set:
+    * <ul>
+    * <li><code>SERVICE_DESCRIPTION</code>
+    * <li><code>SERVICE_PID</code>
+    * <li><code>PARSER_VALIDATING</code>- instantiates a parser and queries
+    * it to find out whether it is validating or not
+    * <li><code>PARSER_NAMESPACEAWARE</code>- instantiates a parser and
+    * queries it to find out whether it is namespace aware or not
+    * <ul>
+    * 
+    * @param factory The <code>SAXParserFactory</code> object
+    * @param props <code>Hashtable</code> of service properties.
+    */
+   private void setDefaultSAXProperties(SAXParserFactory factory,
+         Hashtable props, int index) {
+      props.put(Constants.SERVICE_DESCRIPTION, SAXFACTORYDESCRIPTION);
+      props.put(Constants.SERVICE_PID, SAXFACTORYNAME + "."
+            + context.getBundle().getBundleId() + "." + index);
+      setSAXProperties(factory, props);
+   }
+
+   /**
+    * <p>
+    * Set the customizable SAX Parser Service Properties.
+    * 
+    * <p>
+    * This method attempts to instantiate a validating parser and a
+    * namespaceaware parser to determine if the parser can support those
+    * features. The appropriate properties are then set in the specified
+    * properties object.
+    * 
+    * <p>
+    * This method can be overridden to add additional SAX2 features and
+    * properties. If you want to be able to filter searches of the OSGi service
+    * registry, this method must put a key, value pair into the properties
+    * object for each feature or property. For example,
+    * 
+    * properties.put("http://www.acme.com/features/foo", Boolean.TRUE);
+    * 
+    * @param factory - the SAXParserFactory object
+    * @param properties - the properties object for the service
+    */
+   public void setSAXProperties(SAXParserFactory factory, Hashtable properties) {
+      // check if this parser can be configured to validate
+      boolean validating = true;
+      factory.setValidating(true);
+      factory.setNamespaceAware(false);
+      try {
+         factory.newSAXParser();
+      }
+      catch (Exception pce_val) {
+         validating = false;
+      }
+      // check if this parser can be configured to be namespaceaware
+      boolean namespaceaware = true;
+      factory.setValidating(false);
+      factory.setNamespaceAware(true);
+      try {
+         factory.newSAXParser();
+      }
+      catch (Exception pce_nsa) {
+         namespaceaware = false;
+      }
+      // set the factory values
+      factory.setValidating(validating);
+      factory.setNamespaceAware(namespaceaware);
+      // set the OSGi service properties
+      properties.put(PARSER_NAMESPACEAWARE, new Boolean(namespaceaware));
+      properties.put(PARSER_VALIDATING, new Boolean(validating));
+   }
+
+   /**
+    * Register DOM Parser Factory Services with the framework.
+    * 
+    * @param parserFactoryClassNames - a <code>Vector</code> of
+    *        <code>String</code> objects containing the names of the parser
+    *        Factory Classes
+    * @throws FactoryConfigurationError if thrown from <code>getFactory</code>
+    */
+   private void registerDOMParsers(Vector parserFactoryClassNames)
+         throws FactoryConfigurationError {
+      if (parserFactoryClassNames != null) {
+         Enumeration e = parserFactoryClassNames.elements();
+         int index = 0;
+         while (e.hasMoreElements()) {
+            String parserFactoryClassName = (String) e.nextElement();
+            // create a dom parser factory just to get it's default
+            // properties. It will never be used since
+            // this class will operate as a service factory and give each
+            // service requestor it's own DocumentBuilderFactory
+            DocumentBuilderFactory factory = (DocumentBuilderFactory) getFactory(parserFactoryClassName);
+            Hashtable properties = new Hashtable(7);
+            // figure out the default properties of the parser
+            setDefaultDOMProperties(factory, properties, index);
+            // store the parser factory class name in the properties so that
+            // it can be retrieved when getService is called
+            // to return a parser factory
+            properties.put(FACTORYNAMEKEY, parserFactoryClassName);
+            // release the factory
+            factory = null;
+            // register the factory as a service
+            context.registerService(DOMFACTORYNAME, this, properties);
+            index++;
+         }
+      }
+   }
+
+   /**
+    * Set the DOM parser service properties.
+    * 
+    * By default, the following properties are set:
+    * <ul>
+    * <li><code>SERVICE_DESCRIPTION</code>
+    * <li><code>SERVICE_PID</code>
+    * <li><code>PARSER_VALIDATING</code>
+    * <li><code>PARSER_NAMESPACEAWARE</code>
+    * <ul>
+    * 
+    * @param factory The <code>DocumentBuilderFactory</code> object
+    * @param props <code>Hashtable</code> of service properties.
+    */
+   private void setDefaultDOMProperties(DocumentBuilderFactory factory,
+         Hashtable props, int index) {
+      props.put(Constants.SERVICE_DESCRIPTION, DOMFACTORYDESCRIPTION);
+      props.put(Constants.SERVICE_PID, DOMFACTORYNAME + "."
+            + context.getBundle().getBundleId() + "." + index);
+      setDOMProperties(factory, props);
+   }
+
+   /**
+    * <p>
+    * Set the customizable DOM Parser Service Properties.
+    * 
+    * <p>
+    * This method attempts to instantiate a validating parser and a
+    * namespaceaware parser to determine if the parser can support those
+    * features. The appropriate properties are then set in the specified props
+    * object.
+    * 
+    * <p>
+    * This method can be overridden to add additional DOM2 features and
+    * properties. If you want to be able to filter searches of the OSGi service
+    * registry, this method must put a key, value pair into the properties
+    * object for each feature or property. For example,
+    * 
+    * properties.put("http://www.acme.com/features/foo", Boolean.TRUE);
+    * 
+    * @param factory - the DocumentBuilderFactory object
+    * @param props - Hashtable of service properties.
+    */
+   public void setDOMProperties(DocumentBuilderFactory factory, Hashtable props) {
+      // check if this parser can be configured to validate
+      boolean validating = true;
+      factory.setValidating(true);
+      factory.setNamespaceAware(false);
+      try {
+         factory.newDocumentBuilder();
+      }
+      catch (Exception pce_val) {
+         validating = false;
+      }
+      // check if this parser can be configured to be namespaceaware
+      boolean namespaceaware = true;
+      factory.setValidating(false);
+      factory.setNamespaceAware(true);
+      try {
+         factory.newDocumentBuilder();
+      }
+      catch (Exception pce_nsa) {
+         namespaceaware = false;
+      }
+      // set the factory values
+      factory.setValidating(validating);
+      factory.setNamespaceAware(namespaceaware);
+      // set the OSGi service properties
+      props.put(PARSER_VALIDATING, new Boolean(validating));
+      props.put(PARSER_NAMESPACEAWARE, new Boolean(namespaceaware));
+   }
+
+   /**
+    * Given a parser factory class name, instantiate that class.
+    * 
+    * @param parserFactoryClassName A <code>String</code> object containing
+    *        the name of the parser factory class
+    * @return a parserFactoryClass Object
+    * @pre parserFactoryClassName!=null
+    */
+   private Object getFactory(String parserFactoryClassName)
+         throws FactoryConfigurationError {
+      Exception e = null;
+      try {
+         return Class.forName(parserFactoryClassName).newInstance();
+      }
+      catch (ClassNotFoundException cnfe) {
+         e = cnfe;
+      }
+      catch (InstantiationException ie) {
+         e = ie;
+      }
+      catch (IllegalAccessException iae) {
+         e = iae;
+      }
+      throw new FactoryConfigurationError(e);
+   }
+
+   /**
+    * Creates a new XML Parser Factory object.
+    * 
+    * <p>
+    * A unique XML Parser Factory object is returned for each call to this
+    * method.
+    * 
+    * <p>
+    * The returned XML Parser Factory object will be configured for validating
+    * and namespace aware support as specified in the service properties of the
+    * specified ServiceRegistration object.
+    * 
+    * This method can be overridden to configure additional features in the
+    * returned XML Parser Factory object.
+    * 
+    * @param bundle The bundle using the service.
+    * @param registration The <code>ServiceRegistration</code> object for the
+    *        service.
+    * @return A new, configured XML Parser Factory object or null if a
+    *         configuration error was encountered
+    */
+   public Object getService(Bundle bundle, ServiceRegistration registration) {
+      ServiceReference sref = registration.getReference();
+      String parserFactoryClassName = (String) sref
+            .getProperty(FACTORYNAMEKEY);
+      try {
+         // need to set factory properties
+         Object factory = getFactory(parserFactoryClassName);
+         if (factory instanceof SAXParserFactory) {
+            ((SAXParserFactory) factory).setValidating(((Boolean) sref
+                  .getProperty(PARSER_VALIDATING)).booleanValue());
+            ((SAXParserFactory) factory).setNamespaceAware(((Boolean) sref
+                  .getProperty(PARSER_NAMESPACEAWARE)).booleanValue());
+         }
+         else
+            if (factory instanceof DocumentBuilderFactory) {
+               ((DocumentBuilderFactory) factory)
+                     .setValidating(((Boolean) sref
+                           .getProperty(PARSER_VALIDATING))
+                           .booleanValue());
+               ((DocumentBuilderFactory) factory)
+                     .setNamespaceAware(((Boolean) sref
+                           .getProperty(PARSER_NAMESPACEAWARE))
+                           .booleanValue());
+            }
+         return factory;
+      }
+      catch (FactoryConfigurationError fce) {
+         fce.printStackTrace();
+         return null;
+      }
+   }
+
+   /**
+    * Releases a XML Parser Factory object.
+    * 
+    * @param bundle The bundle releasing the service.
+    * @param registration The <code>ServiceRegistration</code> object for the
+    *        service.
+    * @param service The XML Parser Factory object returned by a previous call
+    *        to the <code>getService</code> method.
+    */
+   public void ungetService(Bundle bundle, ServiceRegistration registration,
+         Object service) {
+   }
+}

Modified: projects/jboss-osgi/projects/runtime/jbossas/trunk/.classpath
===================================================================
--- projects/jboss-osgi/projects/runtime/jbossas/trunk/.classpath	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/projects/runtime/jbossas/trunk/.classpath	2009-07-21 14:48:51 UTC (rev 91496)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
+	<classpathentry kind="src" output="target/classes" path="src/main/java"/>
 	<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources"/>
-	<classpathentry kind="src" path="src/main/java"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>
 	<classpathentry kind="output" path="target/classes"/>

Modified: projects/jboss-osgi/projects/runtime/jbossas/trunk/pom.xml
===================================================================
--- projects/jboss-osgi/projects/runtime/jbossas/trunk/pom.xml	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/projects/runtime/jbossas/trunk/pom.xml	2009-07-21 14:48:51 UTC (rev 91496)
@@ -103,6 +103,7 @@
             org/jboss/osgi/jndi/*.class, 
             org/jboss/osgi/microcontainer/*.class, 
             org/jboss/osgi/microcontainer/integration/*.class,
+            org/jboss/osgi/xml/internal/*.class,
             org/jboss/osgi/xml/*.class
           </includes>
         </configuration>

Modified: projects/jboss-osgi/projects/runtime/jbossas/trunk/src/main/java/org/jboss/osgi/microcontainer/integration/MicrocontainerServiceBean.java
===================================================================
--- projects/jboss-osgi/projects/runtime/jbossas/trunk/src/main/java/org/jboss/osgi/microcontainer/integration/MicrocontainerServiceBean.java	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/projects/runtime/jbossas/trunk/src/main/java/org/jboss/osgi/microcontainer/integration/MicrocontainerServiceBean.java	2009-07-21 14:48:51 UTC (rev 91496)
@@ -122,8 +122,8 @@
       log.debug("MicrocontainerServiceMBean registered");
       
       // Register the DOM/SAX factories
-      XMLParserActivatorExt parserActivator = new XMLParserActivatorExt();
-      parserActivator.start(context);
+      //XMLParserActivatorExt parserActivator = new XMLParserActivatorExt();
+      //parserActivator.start(context);
    }
 
    void stop()

Modified: projects/jboss-osgi/projects/runtime/jbossas/trunk/src/main/resources/jboss-beans-felix.xml
===================================================================
--- projects/jboss-osgi/projects/runtime/jbossas/trunk/src/main/resources/jboss-beans-felix.xml	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/projects/runtime/jbossas/trunk/src/main/resources/jboss-beans-felix.xml	2009-07-21 14:48:51 UTC (rev 91496)
@@ -39,6 +39,7 @@
             org.jboss.osgi.spi.service;version=1.0,
             org.jboss.osgi.spi.testing;version=1.0,
             org.jboss.osgi.spi.util;version=1.0, 
+            org.jboss.osgi.xml;version=1.0,
             
             <!-- jboss -->
             org.jboss.beans.metadata.plugins;version=2.0,


Property changes on: projects/jboss-osgi/trunk/reactor
___________________________________________________________________
Name: svn:externals
   - #spi                                            https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/spi/trunk
#bundles/apache-xerces           https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/apache-xerces/trunk
#bundles/common                     https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/common/trunk
#bundles/hotdeploy                   https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/hotdeploy/trunk
#bundles/husky                          https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/husky/trunk
#bundles/jaxb                            https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/jaxb/trunk
#bundles/jmx                             https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/jmx/trunk
#bundles/jndi                             https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/jndi/trunk
#bundles/jboss-common-core  https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/jboss-common-core/trunk
#bundles/jboss-xml-binding      https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/jboss-xml-binding/trunk
#bundles/microcontainer          https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/microcontainer/trunk
#bundles/remotelog                  https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/remotelog/trunk
#bundles/webconsole                https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/webconsole/trunk
#runtime/deployers                   https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/runtime/deployers/trunk
#runtime/equinox                      https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/runtime/equinox/trunk
#runtime/felix                            https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/runtime/felix/trunk
#runtime/jbossas                      https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/runtime/jbossas/trunk
#runtime/knopflerfish               https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/runtime/knopflerfish/trunk

   + #spi                                            https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/spi/trunk
bundles/apache-xerces           https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/apache-xerces/trunk
#bundles/common                     https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/common/trunk
#bundles/hotdeploy                   https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/hotdeploy/trunk
#bundles/husky                          https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/husky/trunk
#bundles/jaxb                            https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/jaxb/trunk
#bundles/jmx                             https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/jmx/trunk
#bundles/jndi                             https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/jndi/trunk
#bundles/jboss-common-core  https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/jboss-common-core/trunk
#bundles/jboss-xml-binding      https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/jboss-xml-binding/trunk
bundles/microcontainer          https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/microcontainer/trunk
#bundles/remotelog                  https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/remotelog/trunk
#bundles/webconsole                https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/bundles/webconsole/trunk
#runtime/deployers                   https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/runtime/deployers/trunk
#runtime/equinox                      https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/runtime/equinox/trunk
#runtime/felix                            https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/runtime/felix/trunk
runtime/jbossas                      https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/runtime/jbossas/trunk
#runtime/knopflerfish               https://svn.jboss.org/repos/jbossas/projects/jboss-osgi/projects/runtime/knopflerfish/trunk


Modified: projects/jboss-osgi/trunk/reactor/blueprint/testsuite/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/reactor/blueprint/testsuite/pom.xml	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/trunk/reactor/blueprint/testsuite/pom.xml	2009-07-21 14:48:51 UTC (rev 91496)
@@ -79,6 +79,13 @@
       <groupId>org.osgi</groupId>
       <artifactId>org.osgi.compendium</artifactId>
     </dependency>
+
+    <!-- Test Dependencies -->
+    <dependency>
+      <groupId>org.jboss.logging</groupId>
+      <artifactId>jboss-logging-log4j</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <!-- Build -->

Modified: projects/jboss-osgi/trunk/reactor/pom.xml
===================================================================
--- projects/jboss-osgi/trunk/reactor/pom.xml	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/trunk/reactor/pom.xml	2009-07-21 14:48:51 UTC (rev 91496)
@@ -27,6 +27,9 @@
   </parent>
 
   <modules>
+    <module>bundles/apache-xerces</module>
+    <module>bundles/microcontainer</module>
+    <module>runtime/jbossas</module>
     <module>blueprint</module>
   </modules>
 

Deleted: projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/EndpointService.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/EndpointService.java	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/EndpointService.java	2009-07-21 14:48:51 UTC (rev 91496)
@@ -1,102 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2005, JBoss Inc., and individual contributors as indicated
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * This is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as
- * published by the Free Software Foundation; either version 2.1 of
- * the License, or (at your option) any later version.
- *
- * This software is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this software; if not, write to the Free
- * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
- * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
- */
-package org.jboss.test.osgi.example.http.bundle;
-
-//$Id: EndpointService.java 87329 2009-04-15 10:34:21Z thomas.diesler at jboss.com $
-
-import java.util.Properties;
-
-import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceEvent;
-import org.osgi.framework.ServiceListener;
-import org.osgi.service.http.HttpService;
-import org.osgi.util.tracker.ServiceTracker;
-
-/**
- * A service that creates an Http context through the HttpService
- * 
- * @author thomas.diesler at jboss.com
- * @since 23-Jan-2009
- */
-public class EndpointService implements ServiceListener
-{
-   private BundleContext context;
-
-   public EndpointService(BundleContext context)
-   {
-      this.context = context;
-      context.addServiceListener(this);
-   }
-
-   private void registerService()
-   {
-      try
-      {
-         HttpService httpService = getHttpService();
-
-         Properties initParams = new Properties();
-         initParams.setProperty("initProp", "SomeValue");
-         httpService.registerServlet("/servlet", new EndpointServlet(context), initParams, null);
-         httpService.registerResources("/file", "/res", null);
-      }
-      catch (Exception ex)
-      {
-         throw new RuntimeException("Cannot register context", ex);
-      }
-   }
-
-   private void unregisterService()
-   {
-      HttpService httpService = getHttpService();
-      httpService.unregister("/servlet");
-      httpService.unregister("/file");
-      context.removeServiceListener(this);
-   }
-
-   private HttpService getHttpService()
-   {
-      ServiceTracker tracker = new ServiceTracker(context, HttpService.class.getName(), null);
-      tracker.open();
-      
-      HttpService service = (HttpService)tracker.getService();
-      if (service == null)
-         throw new IllegalStateException("HttpService not registered");
-      
-      return service;
-   }
-
-   public void serviceChanged(ServiceEvent event)
-   {
-      Object service = context.getService(event.getServiceReference());
-      if (service == this)
-      {
-         if (event.getType() == ServiceEvent.REGISTERED)
-         {
-            registerService();
-         }
-         else if (event.getType() == ServiceEvent.UNREGISTERING)
-         {
-            unregisterService();
-         }
-      }
-   }
-}

Modified: projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/HttpExampleActivator.java
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/HttpExampleActivator.java	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/java/org/jboss/test/osgi/example/http/bundle/HttpExampleActivator.java	2009-07-21 14:48:51 UTC (rev 91496)
@@ -23,8 +23,13 @@
 
 //$Id: ServiceActivator.java 87329 2009-04-15 10:34:21Z thomas.diesler at jboss.com $
 
+import java.util.Properties;
+
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.http.HttpService;
+import org.osgi.util.tracker.ServiceTracker;
 
 /**
  * A Service Activator
@@ -34,20 +39,57 @@
  */
 public class HttpExampleActivator implements BundleActivator
 {
-  /*
-   * Implements BundleActivator.start(). 
-   * Registers an instance of a HttpEndpoint Service using the bundle context.
-   */
-  public void start(BundleContext context)
-  {
-    EndpointService service = new EndpointService(context);
-    context.registerService(EndpointService.class.getName(), service, null);
-  }
+   private ServiceTracker tracker;
+   
+   public void start(BundleContext context)
+   {
+      tracker = new ServiceTracker(context, HttpService.class.getName(), null)
+      {
+         @Override
+         public Object addingService(ServiceReference reference)
+         {
+            HttpService httpService = (HttpService)super.addingService(reference);
+            registerService(context, httpService);
+            return httpService;
+         }
 
-  /*
-   * Implements BundleActivator.stop(). 
-   */
-  public void stop(BundleContext context)
-  {
-  }
+         @Override
+         public void removedService(ServiceReference reference, Object service)
+         {
+            HttpService httpService = (HttpService)service;
+            unregisterService(context, httpService);
+            super.removedService(reference, service);
+         }
+      };
+      tracker.open();
+   }
+
+   public void stop(BundleContext context)
+   {
+      HttpService httpService = (HttpService)tracker.getService();
+      if (httpService != null)
+         unregisterService(context, httpService);
+   }
+
+   private void registerService(BundleContext context, HttpService httpService)
+   {
+      try
+      {
+         Properties initParams = new Properties();
+         initParams.setProperty("initProp", "SomeValue");
+         httpService.registerServlet("/servlet", new EndpointServlet(context), initParams, null);
+         httpService.registerResources("/file", "/res", null);
+      }
+      catch (Exception ex)
+      {
+         throw new RuntimeException("Cannot register context", ex);
+      }
+   }
+
+   private void unregisterService(BundleContext context, HttpService httpService)
+   {
+      httpService.unregister("/servlet");
+      httpService.unregister("/file");
+   }
+
 }
\ No newline at end of file

Modified: projects/jboss-osgi/trunk/testsuite/example/src/test/resources/xml/jaxb/example-xml-jaxb.bnd
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/resources/xml/jaxb/example-xml-jaxb.bnd	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/resources/xml/jaxb/example-xml-jaxb.bnd	2009-07-21 14:48:51 UTC (rev 91496)
@@ -6,7 +6,7 @@
 Export-Package: org.jboss.test.osgi.example.xml.jaxb
 
 Import-Package: com.sun.xml.bind.v2, javax.xml.bind*, javax.xml.datatype, javax.xml.namespace, \
-   org.jboss.osgi.husky*, org.jboss.osgi.jaxb, org.jboss.osgi.spi*, org.junit, org.osgi.framework
+   org.jboss.osgi.husky*, org.jboss.osgi.jaxb, org.jboss.osgi.spi.*, org.junit, org.osgi.framework
 
 Include-Resource: booking.xml, booking.xsd
 

Modified: projects/jboss-osgi/trunk/testsuite/example/src/test/resources/xml/parser/example-xml-parser.bnd
===================================================================
--- projects/jboss-osgi/trunk/testsuite/example/src/test/resources/xml/parser/example-xml-parser.bnd	2009-07-21 13:54:45 UTC (rev 91495)
+++ projects/jboss-osgi/trunk/testsuite/example/src/test/resources/xml/parser/example-xml-parser.bnd	2009-07-21 14:48:51 UTC (rev 91496)
@@ -4,6 +4,11 @@
 
 # Export the package that contains the test case
 Export-Package: org.jboss.test.osgi.example.xml.parser
+
+Import-Package: javax.xml.parsers, org.jboss.osgi.*, org.jboss.osgi.spi.*, org.jboss.osgi.xml, \
+	org.junit, org.osgi.framework, org.w3c.dom*, org.xml.sax* 
+
+
 Include-Resource: example-xml-parser.xml
 
 # Tell Husky that there are test cases in this package




More information about the jboss-cvs-commits mailing list