package org.argeo.slc.autoui;
import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
import java.util.List;
-import java.util.Map;
+import java.util.Properties;
+import java.util.Vector;
import org.apache.felix.framework.Felix;
import org.apache.felix.framework.cache.BundleCache;
-import org.apache.felix.framework.util.FelixConstants;
-import org.apache.felix.framework.util.StringMap;
import org.apache.felix.main.AutoActivator;
import org.netbeans.jemmy.ClassReference;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
import org.osgi.framework.ServiceReference;
public class Main {
+ private final Felix felix;
+ private final BundleContext context;
+
+ public Main(Felix felix) {
+ this.felix = felix;
+ context = felix.getBundleContext();
+ }
+
+ public Felix getFelix() {
+ return felix;
+ }
+
+ public BundleContext getContext() {
+ return context;
+ }
- /**
- * @param args
- */
public static void main(String[] args) {
try {
- // Create a temporary bundle cache directory and
- // make sure to clean it up on exit.
- final File cachedir = File.createTempFile(
- "felix.example.servicebased", null);
- cachedir.delete();
- Runtime.getRuntime().addShutdownHook(new Thread() {
- public void run() {
- deleteFileOrDir(cachedir);
- }
- });
-
- String mavenBase = "file:/home/mbaudier/.m2/repository/";
- String uiPackage = "org.argeo.slc.testui";
- Map configMap = new StringMap(false);
- configMap
- .put(
- Constants.FRAMEWORK_SYSTEMPACKAGES,
- "org.osgi.framework; version=1.4.0,"
- + "org.osgi.service.packageadmin; version=1.2.0,"
- + "org.osgi.service.startlevel; version=1.1.0,"
- + "org.osgi.service.url; version=1.0.0,"
- + "org.osgi.util.tracker; version=1.3.3,"
- /*+ "org.apache.felix.example.servicebased.host.service; version=1.0.0,"*/
- + "org.argeo.slc.autoui; version=0.10.3.SNAPSHOT,"
- + uiPackage+","
- + "javax.swing");
- configMap
- .put(
- AutoActivator.AUTO_START_PROP + ".1",
- mavenBase
- + "org/apache/felix/org.apache.felix.shell/1.0.2/org.apache.felix.shell-1.0.2.jar "
- + mavenBase
- + "org/apache/felix/org.apache.felix.shell.tui/1.0.2/org.apache.felix.shell.tui-1.0.2.jar "
- + mavenBase
- + "org/argeo/dep/jemmy/org.argeo.dep.jemmy.nb61/0.2.0/org.argeo.dep.jemmy.nb61-0.2.0.jar "
- + mavenBase
- + "org/argeo/slc/sandbox/org.argeo.slc.sandbox.jemmytest/0.1.1-SNAPSHOT/org.argeo.slc.sandbox.jemmytest-0.1.1-SNAPSHOT.jar");
- configMap.put(FelixConstants.LOG_LEVEL_PROP, "1");
- configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, cachedir
- .getAbsolutePath());
-
- // Create list to hold custom framework activators.
- List list = new ArrayList();
- // Add activator to process auto-start/install properties.
- list.add(new AutoActivator(configMap));
- // Add our own activator.
- list.add(new AutoUiActivator());
-
- BundleContext context = null;
- try {
- // Now create an instance of the framework.
- Felix felix = new Felix(configMap, list);
- felix.start();
-
- context = felix.getBundleContext();
-
- // Bundle jemmyTestBundle = context
- // .installBundle(mavenBase
- // +
- // "org/argeo/slc/sandbox/org.argeo.slc.sandbox.jemmytest/0.1.1-SNAPSHOT/org.argeo.slc.sandbox.jemmytest-0.1.1-SNAPSHOT.jar");
- // jemmyTestBundle.start();
-
- } catch (Exception ex) {
- System.err.println("Could not create framework: " + ex);
- ex.printStackTrace();
- System.exit(-1);
- }
+ // Start OSGi system
+ Properties config = prepareConfig();
+ Main main = startSystem(config);
-
- // Start UI
- String className = "org.argeo.slc.testui.SwingTestUi";
- //String className = SwingTestUi.class.getName();
- // String[] args = {};
- // SwingTestUi.main(args);
- // Start application
- ClassReference classReference = new ClassReference(className);
- String[] uiArgs = { "noExitOnClose" };
- classReference.startApplication(uiArgs);
-
-
-
- ServiceReference ref = context
- .getServiceReference("org.argeo.slc.autoui.AutoUiApplication");
-// ServiceReference ref = context
-// .getServiceReference("java.lang.Runnable");
- Object service = context.getService(ref);
- AutoUiActivator.stdOut("service=" + service.getClass());
- AutoUiApplication app = (AutoUiApplication) service;
- app.execute(null);
- // app.execute(null);
-
+ // Start UI (in main class loader)
+ startUi(config);
+ // Automate
+ automateUi(main.getContext());
} catch (Exception e) {
e.printStackTrace();
System.exit(-1);
}
+ }
+
+ protected static Properties prepareConfig() throws Exception {
+ final File cachedir = createTemporaryCacheDir();
+
+ // Load config
+ Properties config = new Properties();
+ InputStream in = null;
+ ;
+ try {
+ in = Main.class
+ .getResourceAsStream("/org/argeo/slc/autoui/felix.properties");
+ config.load(in);
+ } finally {
+ if (in != null)
+ in.close();
+ }
- // Felix felix;
- // // JemmyTestActivator activator;
- //
- // // Create a case-insensitive configuration property map.
- // Map configMap = new StringMap(false);
- // // Configure the Felix instance to be embedded.
- // configMap.put(FelixConstants.EMBEDDED_EXECUTION_PROP, "true");
- // // Add core OSGi packages to be exported from the class path
- // // via the system bundle.
- // configMap.put(Constants.FRAMEWORK_SYSTEMPACKAGES,
- // "org.osgi.framework; version=1.3.0,"
- // + "org.osgi.service.packageadmin; version=1.2.0,"
- // + "org.osgi.service.startlevel; version=1.0.0,"
- // + "org.osgi.service.url; version=1.0.0");
- // // Explicitly specify the directory to use for caching bundles.
- // configMap.put(BundleCache.CACHE_PROFILE_DIR_PROP, "target/cache");
- //
- // try {
- // // Create host activator;
- // // activator = new JemmyTestActivator();
- // List list = new ArrayList();
- // // list.add(activator);
- // list.add(new Activator());
- // list.add(new org.apache.felix.shell.impl.Activator());
- // list.add(new org.apache.felix.bundlerepository.Activator());
- //
- // // Now create an instance of the framework with
- // // our configuration properties and activator.
- // felix = new Felix(configMap, list);
- //
- // // Now start Felix instance.
- // felix.start();
- //
- // Bundle jemmyBundle = felix
- // .getBundleContext()
- // .installBundle(
- // "file:/home/mbaudier/.m2/repository/org/argeo/dep/jemmy/org.argeo.dep.jemmy.nb61/0.2.0/org.argeo.dep.jemmy.nb61-0.2.0.jar");
- // jemmyBundle.start();
- // //
- // // Bundle autoUiBundle = felix
- // // .getBundleContext()
- // // .installBundle(
- // //
- // "reference:file:/home/mbaudier/dev/src/slc/org.argeo.slc.autoui/");
- // // autoUiBundle.start();
- //
- // Bundle[] bundles = felix.getBundleContext().getBundles();
- // for (int i = 0; i < bundles.length; i++) {
- // Bundle bundle = bundles[i];
- // System.out.println("" + bundle.getBundleId() + "\t"
- // + bundle.getSymbolicName() + "\t" + bundle.getState()
- // + "\t" + bundle.getLocation());
- // }
- //
- // // felix.stop();
- // } catch (Exception ex) {
- // System.err.println("Could not create framework: " + ex);
- // ex.printStackTrace();
- // }
- //
+ // Perform variable substitution for system properties.
+ for (Enumeration e = config.propertyNames(); e.hasMoreElements();) {
+ String name = (String) e.nextElement();
+ config.setProperty(name, org.apache.felix.main.Main.substVars(
+ config.getProperty(name), name, null, config));
+ }
+
+ config.put(BundleCache.CACHE_PROFILE_DIR_PROP, cachedir
+ .getAbsolutePath());
+
+ return config;
}
+ protected static File createTemporaryCacheDir() throws IOException {
+ // Create a temporary bundle cache directory and
+ // make sure to clean it up on exit.
+ final File cachedir = File.createTempFile("argeo.slc.autoui", null);
+ cachedir.delete();
+ Runtime.getRuntime().addShutdownHook(new Thread() {
+ public void run() {
+ deleteFileOrDir(cachedir);
+ }
+ });
+ return cachedir;
+ }
+
+ public static Main startSystem(Properties config) throws Exception {
+ // Create list to hold custom framework activators.
+ List list = new ArrayList();
+ // Add activator to process auto-start/install properties.
+ list.add(new AutoActivator(config));
+ // Add our own activator.
+ list.add(new AutoUiActivator());
+
+ // Now create an instance of the framework.
+ Felix felix = new Felix(config, list);
+ felix.start();
+
+ return new Main(felix);
+ }
+
+ public static void startUi(Properties config) throws Exception {
+ String className = config.getProperty("argeo.scl.autoui.uiclass");
+ String[] uiArgs = readArgumentsFromLine(config.getProperty(
+ "argeo.slc.autoui.uiargs", ""));
+ ClassReference classReference = new ClassReference(className);
+ classReference.startApplication(uiArgs);
+ }
+
+ protected static void automateUi(BundleContext context) throws Exception {
+ // Retrieve service and execute it
+ ServiceReference ref = context
+ .getServiceReference("org.argeo.slc.autoui.AutoUiApplication");
+ Object service = context.getService(ref);
+ AutoUiActivator.stdOut("service.class=" + service.getClass());
+ AutoUiApplication app = (AutoUiApplication) service;
+ app.execute(null);
+ }
+
+ /* UTILITIES */
+
/**
- * Utility method used to delete the profile directory when run as a
- * stand-alone application.
- *
- * @param file
- * The file to recursively delete.
+ * Transform a line into an array of arguments, taking "" as single
+ * arguments. (nested \" are not supported)
*/
+ private static String[] readArgumentsFromLine(String lineOrig) {
+
+ String line = lineOrig.trim();// make sure there are no trailing
+ // spaces
+ System.out.println("line=" + line);
+ List args = new Vector();
+ StringBuffer curr = new StringBuffer("");
+ boolean inQuote = false;
+ char[] arr = line.toCharArray();
+ for (int i = 0; i < arr.length; i++) {
+ char c = arr[i];
+ switch (c) {
+ case '\"':
+ inQuote = !inQuote;
+ break;
+ case ' ':
+ if (!inQuote) {// otherwise, no break: goes to default
+ if (curr.length() > 0) {
+ args.add(curr.toString());
+ curr = new StringBuffer("");
+ }
+ break;
+ }
+ default:
+ curr.append(c);
+ break;
+ }
+ }
+
+ // Add last arg
+ if (curr.length() > 0) {
+ args.add(curr.toString());
+ curr = null;
+ }
+
+ String[] res = new String[args.size()];
+ for (int i = 0; i < args.size(); i++) {
+ res[i] = args.get(i).toString();
+ System.out.println("res[i]=" + res[i]);
+ }
+ return res;
+ }
+
private static void deleteFileOrDir(File file) {
if (file.isDirectory()) {
File[] childs = file.listFiles();
--- /dev/null
+
+# Argeo Specific Context Properties
+argeo.slc.mavenBase=file:/home/mbaudier/.m2/repository/
+
+argeo.scl.autoui.uiclass=org.argeo.slc.testui.SwingTestUi
+argeo.slc.autoui.uiargs=noExitOnClose
+
+#
+# Framework config properties.
+#
+org.osgi.framework.system.packages=org.osgi.framework; version=1.4.0, \
+ org.osgi.service.packageadmin; version=1.2.0, \
+ org.osgi.service.startlevel; version=1.1.0, \
+ org.osgi.service.url; version=1.0.0, \
+ org.osgi.util.tracker; version=1.3.3, \
+ org.argeo.slc.autoui; version=0.10.3.SNAPSHOT, \
+ org.argeo.slc.testui \
+ ${jre-${java.specification.version}}
+
+#org.osgi.framework.bootdelegation=sun.*,com.sun.*
+#felix.cache.profile=foo
+#felix.auto.start.1= \
+# file:bundle/org.apache.felix.shell-1.0.2.jar \
+# file:bundle/org.apache.felix.shell.tui-1.0.2.jar \
+# file:bundle/org.apache.felix.bundlerepository-1.2.0.jar
+
+felix.auto.start.1= \
+ ${argeo.slc.mavenBase}org/apache/felix/org.apache.felix.shell/1.0.2/org.apache.felix.shell-1.0.2.jar \
+ ${argeo.slc.mavenBase}org/apache/felix/org.apache.felix.shell.tui/1.0.2/org.apache.felix.shell.tui-1.0.2.jar \
+ ${argeo.slc.mavenBase}org/argeo/dep/jemmy/org.argeo.dep.jemmy.nb61/0.2.1-SNAPSHOT/org.argeo.dep.jemmy.nb61-0.2.1-SNAPSHOT.jar \
+ ${argeo.slc.mavenBase}org/argeo/slc/sandbox/org.argeo.slc.sandbox.jemmytest/0.1.1-SNAPSHOT/org.argeo.slc.sandbox.jemmytest-0.1.1-SNAPSHOT.jar"
+
+
+felix.log.level=1
+felix.startlevel.framework=1
+felix.startlevel.bundle=1
+#felix.service.urlhandlers=false
+
+#
+# Bundle config properties.
+#
+org.osgi.service.http.port=8080
+osgi.shell.telnet=on
+obr.repository.url=http://felix.apache.org/obr/releases.xml
+
+
+#
+# Java platform package export properties.
+#
+jre-1.3=, \
+ javax.accessibility; \
+ javax.naming; \
+ javax.naming.directory; \
+ javax.naming.event; \
+ javax.naming.ldap; \
+ javax.naming.spi; \
+ javax.rmi; \
+ javax.rmi.CORBA; \
+ javax.sound.midi; \
+ javax.sound.midi.spi; \
+ javax.sound.sampled; \
+ javax.sound.sampled.spi; \
+ javax.swing; \
+ javax.swing.border; \
+ javax.swing.colorchooser; \
+ javax.swing.event; \
+ javax.swing.filechooser; \
+ javax.swing.plaf; \
+ javax.swing.plaf.basic; \
+ javax.swing.plaf.metal; \
+ javax.swing.plaf.multi; \
+ javax.swing.table; \
+ javax.swing.text; \
+ javax.swing.text.html; \
+ javax.swing.text.html.parser; \
+ javax.swing.text.rtf; \
+ javax.swing.tree; \
+ javax.swing.undo; \
+ javax.transaction; \
+ org.omg.CORBA; \
+ org.omg.CORBA_2_3; \
+ org.omg.CORBA_2_3.portable; \
+ org.omg.CORBA.DynAnyPackage; \
+ org.omg.CORBA.ORBPackage; \
+ org.omg.CORBA.portable; \
+ org.omg.CORBA.TypeCodePackage; \
+ org.omg.CosNaming; \
+ org.omg.CosNaming.NamingContextPackage; \
+ org.omg.SendingContext; \
+ org.omg.stub.java.rmi; \
+ version="1.3.0"
+
+jre-1.4=, \
+ javax.accessibility; \
+ javax.crypto; \
+ javax.crypto.interfaces; \
+ javax.crypto.spec; \
+ javax.imageio; \
+ javax.imageio.event; \
+ javax.imageio.metadata; \
+ javax.imageio.plugins.jpeg; \
+ javax.imageio.spi; \
+ javax.imageio.stream; \
+ javax.naming; \
+ javax.naming.directory; \
+ javax.naming.event; \
+ javax.naming.ldap; \
+ javax.naming.spi; \
+ javax.net; \
+ javax.net.ssl; \
+ javax.print; \
+ javax.print.attribute; \
+ javax.print.attribute.standard; \
+ javax.print.event; \
+ javax.rmi; \
+ javax.rmi.CORBA; \
+ javax.security.auth; \
+ javax.security.auth.callback; \
+ javax.security.auth.kerberos; \
+ javax.security.auth.login; \
+ javax.security.auth.spi; \
+ javax.security.auth.x500; \
+ javax.sound.midi; \
+ javax.sound.midi.spi; \
+ javax.sound.sampled; \
+ javax.sound.sampled.spi; \
+ javax.sql; \
+ javax.swing; \
+ javax.swing.border; \
+ javax.swing.colorchooser; \
+ javax.swing.event; \
+ javax.swing.filechooser; \
+ javax.swing.plaf; \
+ javax.swing.plaf.basic; \
+ javax.swing.plaf.metal; \
+ javax.swing.plaf.multi; \
+ javax.swing.table; \
+ javax.swing.text; \
+ javax.swing.text.html; \
+ javax.swing.text.html.parser; \
+ javax.swing.text.rtf; \
+ javax.swing.tree; \
+ javax.swing.undo; \
+ javax.transaction; \
+ javax.transaction.xa; \
+ javax.xml.parsers; \
+ javax.xml.transform; \
+ javax.xml.transform.dom; \
+ javax.xml.transform.sax; \
+ javax.xml.transform.stream; \
+ org.ietf.jgss; \
+ org.omg.CORBA; \
+ org.omg.CORBA_2_3; \
+ org.omg.CORBA_2_3.portable; \
+ org.omg.CORBA.DynAnyPackage; \
+ org.omg.CORBA.ORBPackage; \
+ org.omg.CORBA.portable; \
+ org.omg.CORBA.TypeCodePackage; \
+ org.omg.CosNaming; \
+ org.omg.CosNaming.NamingContextExtPackage; \
+ org.omg.CosNaming.NamingContextPackage; \
+ org.omg.Dynamic; \
+ org.omg.DynamicAny; \
+ org.omg.DynamicAny.DynAnyFactoryPackage; \
+ org.omg.DynamicAny.DynAnyPackage; \
+ org.omg.IOP; \
+ org.omg.IOP.CodecFactoryPackage; \
+ org.omg.IOP.CodecPackage; \
+ org.omg.Messaging; \
+ org.omg.PortableInterceptor; \
+ org.omg.PortableInterceptor.ORBInitInfoPackage; \
+ org.omg.PortableServer; \
+ org.omg.PortableServer.CurrentPackage; \
+ org.omg.PortableServer.POAManagerPackage; \
+ org.omg.PortableServer.POAPackage; \
+ org.omg.PortableServer.portable; \
+ org.omg.PortableServer.ServantLocatorPackage; \
+ org.omg.SendingContext; \
+ org.omg.stub.java.rmi; \
+ org.w3c.dom; \
+ org.w3c.dom.css; \
+ org.w3c.dom.events; \
+ org.w3c.dom.html; \
+ org.w3c.dom.stylesheets; \
+ org.w3c.dom.traversal; \
+ org.w3c.dom.views; \
+ org.xml.sax; \
+ org.xml.sax.ext; \
+ org.xml.sax.helpers; \
+ version="1.4.0"
+
+jre-1.5=, \
+ javax.accessibility; \
+ javax.activity; \
+ javax.crypto; \
+ javax.crypto.interfaces; \
+ javax.crypto.spec; \
+ javax.imageio; \
+ javax.imageio.event; \
+ javax.imageio.metadata; \
+ javax.imageio.plugins.bmp; \
+ javax.imageio.plugins.jpeg; \
+ javax.imageio.spi; \
+ javax.imageio.stream; \
+ javax.management; \
+ javax.management.loading; \
+ javax.management.modelmbean; \
+ javax.management.monitor; \
+ javax.management.openmbean; \
+ javax.management.relation; \
+ javax.management.remote; \
+ javax.management.remote.rmi; \
+ javax.management.timer; \
+ javax.naming; \
+ javax.naming.directory; \
+ javax.naming.event; \
+ javax.naming.ldap; \
+ javax.naming.spi; \
+ javax.net; \
+ javax.net.ssl; \
+ javax.print; \
+ javax.print.attribute; \
+ javax.print.attribute.standard; \
+ javax.print.event; \
+ javax.rmi; \
+ javax.rmi.CORBA; \
+ javax.rmi.ssl; \
+ javax.security.auth; \
+ javax.security.auth.callback; \
+ javax.security.auth.kerberos; \
+ javax.security.auth.login; \
+ javax.security.auth.spi; \
+ javax.security.auth.x500; \
+ javax.security.sasl; \
+ javax.sound.midi; \
+ javax.sound.midi.spi; \
+ javax.sound.sampled; \
+ javax.sound.sampled.spi; \
+ javax.sql; \
+ javax.sql.rowset; \
+ javax.sql.rowset.serial; \
+ javax.sql.rowset.spi; \
+ javax.swing; \
+ javax.swing.border; \
+ javax.swing.colorchooser; \
+ javax.swing.event; \
+ javax.swing.filechooser; \
+ javax.swing.plaf; \
+ javax.swing.plaf.basic; \
+ javax.swing.plaf.metal; \
+ javax.swing.plaf.multi; \
+ javax.swing.plaf.synth; \
+ javax.swing.table; \
+ javax.swing.text; \
+ javax.swing.text.html; \
+ javax.swing.text.html.parser; \
+ javax.swing.text.rtf; \
+ javax.swing.tree; \
+ javax.swing.undo; \
+ javax.transaction; \
+ javax.transaction.xa; \
+ javax.xml; \
+ javax.xml.datatype; \
+ javax.xml.namespace; \
+ javax.xml.parsers; \
+ javax.xml.transform; \
+ javax.xml.transform.dom; \
+ javax.xml.transform.sax; \
+ javax.xml.transform.stream; \
+ javax.xml.validation; \
+ javax.xml.xpath; \
+ org.ietf.jgss; \
+ org.omg.CORBA; \
+ org.omg.CORBA_2_3; \
+ org.omg.CORBA_2_3.portable; \
+ org.omg.CORBA.DynAnyPackage; \
+ org.omg.CORBA.ORBPackage; \
+ org.omg.CORBA.portable; \
+ org.omg.CORBA.TypeCodePackage; \
+ org.omg.CosNaming; \
+ org.omg.CosNaming.NamingContextExtPackage; \
+ org.omg.CosNaming.NamingContextPackage; \
+ org.omg.Dynamic; \
+ org.omg.DynamicAny; \
+ org.omg.DynamicAny.DynAnyFactoryPackage; \
+ org.omg.DynamicAny.DynAnyPackage; \
+ org.omg.IOP; \
+ org.omg.IOP.CodecFactoryPackage; \
+ org.omg.IOP.CodecPackage; \
+ org.omg.Messaging; \
+ org.omg.PortableInterceptor; \
+ org.omg.PortableInterceptor.ORBInitInfoPackage; \
+ org.omg.PortableServer; \
+ org.omg.PortableServer.CurrentPackage; \
+ org.omg.PortableServer.POAManagerPackage; \
+ org.omg.PortableServer.POAPackage; \
+ org.omg.PortableServer.portable; \
+ org.omg.PortableServer.ServantLocatorPackage; \
+ org.omg.SendingContext; \
+ org.omg.stub.java.rmi; \
+ org.omg.stub.javax.management.remote.rmi; \
+ org.w3c.dom; \
+ org.w3c.dom.bootstrap; \
+ org.w3c.dom.css; \
+ org.w3c.dom.events; \
+ org.w3c.dom.html; \
+ org.w3c.dom.ls; \
+ org.w3c.dom.ranges; \
+ org.w3c.dom.stylesheets; \
+ org.w3c.dom.traversal; \
+ org.w3c.dom.views; \
+ org.xml.sax; \
+ org.xml.sax.ext; \
+ org.xml.sax.helpers; \
+ version="1.5.0"
+
+jre-1.6=, \
+ javax.accessibility; \
+ javax.activation; \
+ javax.activity; \
+ javax.annotation; \
+ javax.annotation.processing; \
+ javax.crypto; \
+ javax.crypto.interfaces; \
+ javax.crypto.spec; \
+ javax.imageio; \
+ javax.imageio.event; \
+ javax.imageio.metadata; \
+ javax.imageio.plugins.bmp; \
+ javax.imageio.plugins.jpeg; \
+ javax.imageio.spi; \
+ javax.imageio.stream; \
+ javax.jws; \
+ javax.jws.soap; \
+ javax.lang.model; \
+ javax.lang.model.element; \
+ javax.lang.model.type; \
+ javax.lang.model.util; \
+ javax.management; \
+ javax.management.loading; \
+ javax.management.modelmbean; \
+ javax.management.monitor; \
+ javax.management.openmbean; \
+ javax.management.relation; \
+ javax.management.remote; \
+ javax.management.remote.rmi; \
+ javax.management.timer; \
+ javax.naming; \
+ javax.naming.directory; \
+ javax.naming.event; \
+ javax.naming.ldap; \
+ javax.naming.spi; \
+ javax.net; \
+ javax.net.ssl; \
+ javax.print; \
+ javax.print.attribute; \
+ javax.print.attribute.standard; \
+ javax.print.event; \
+ javax.rmi; \
+ javax.rmi.CORBA; \
+ javax.rmi.ssl; \
+ javax.script; \
+ javax.security.auth; \
+ javax.security.auth.callback; \
+ javax.security.auth.kerberos; \
+ javax.security.auth.login; \
+ javax.security.auth.spi; \
+ javax.security.auth.x500; \
+ javax.security.cert; \
+ javax.security.sasl; \
+ javax.sound.midi; \
+ javax.sound.midi.spi; \
+ javax.sound.sampled; \
+ javax.sound.sampled.spi; \
+ javax.sql; \
+ javax.sql.rowset; \
+ javax.sql.rowset.serial; \
+ javax.sql.rowset.spi; \
+ javax.swing; \
+ javax.swing.border; \
+ javax.swing.colorchooser; \
+ javax.swing.event; \
+ javax.swing.filechooser; \
+ javax.swing.plaf; \
+ javax.swing.plaf.basic; \
+ javax.swing.plaf.metal; \
+ javax.swing.plaf.multi; \
+ javax.swing.plaf.synth; \
+ javax.swing.table; \
+ javax.swing.text; \
+ javax.swing.text.html; \
+ javax.swing.text.html.parser; \
+ javax.swing.text.rtf; \
+ javax.swing.tree; \
+ javax.swing.undo; \
+ javax.tools; \
+ javax.transaction; \
+ javax.transaction.xa; \
+ javax.xml; \
+ javax.xml.bind; \
+ javax.xml.bind.annotation; \
+ javax.xml.bind.annotation.adapters; \
+ javax.xml.bind.attachment; \
+ javax.xml.bind.helpers; \
+ javax.xml.bind.util; \
+ javax.xml.crypto; \
+ javax.xml.crypto.dom; \
+ javax.xml.crypto.dsig; \
+ javax.xml.crypto.dsig.dom; \
+ javax.xml.crypto.dsig.keyinfo; \
+ javax.xml.crypto.dsig.spec; \
+ javax.xml.datatype; \
+ javax.xml.namespace; \
+ javax.xml.parsers; \
+ javax.xml.soap; \
+ javax.xml.stream; \
+ javax.xml.stream.events; \
+ javax.xml.stream.util; \
+ javax.xml.transform; \
+ javax.xml.transform.dom; \
+ javax.xml.transform.sax; \
+ javax.xml.transform.stax; \
+ javax.xml.transform.stream; \
+ javax.xml.validation; \
+ javax.xml.ws; \
+ javax.xml.ws.handler; \
+ javax.xml.ws.handler.soap; \
+ javax.xml.ws.http; \
+ javax.xml.ws.soap; \
+ javax.xml.ws.spi; \
+ javax.xml.xpath; \
+ org.ietf.jgss; \
+ org.omg.CORBA; \
+ org.omg.CORBA_2_3; \
+ org.omg.CORBA_2_3.portable; \
+ org.omg.CORBA.DynAnyPackage; \
+ org.omg.CORBA.ORBPackage; \
+ org.omg.CORBA.portable; \
+ org.omg.CORBA.TypeCodePackage; \
+ org.omg.CosNaming; \
+ org.omg.CosNaming.NamingContextExtPackage; \
+ org.omg.CosNaming.NamingContextPackage; \
+ org.omg.Dynamic; \
+ org.omg.DynamicAny; \
+ org.omg.DynamicAny.DynAnyFactoryPackage; \
+ org.omg.DynamicAny.DynAnyPackage; \
+ org.omg.IOP; \
+ org.omg.IOP.CodecFactoryPackage; \
+ org.omg.IOP.CodecPackage; \
+ org.omg.Messaging; \
+ org.omg.PortableInterceptor; \
+ org.omg.PortableInterceptor.ORBInitInfoPackage; \
+ org.omg.PortableServer; \
+ org.omg.PortableServer.CurrentPackage; \
+ org.omg.PortableServer.POAManagerPackage; \
+ org.omg.PortableServer.POAPackage; \
+ org.omg.PortableServer.portable; \
+ org.omg.PortableServer.ServantLocatorPackage; \
+ org.omg.SendingContext; \
+ org.omg.stub.java.rmi; \
+ org.omg.stub.javax.management.remote.rmi; \
+ org.w3c.dom; \
+ org.w3c.dom.bootstrap; \
+ org.w3c.dom.css; \
+ org.w3c.dom.events; \
+ org.w3c.dom.html; \
+ org.w3c.dom.ls; \
+ org.w3c.dom.ranges; \
+ org.w3c.dom.stylesheets; \
+ org.w3c.dom.traversal; \
+ org.w3c.dom.views; \
+ org.w3c.dom.xpath; \
+ org.xml.sax; \
+ org.xml.sax.ext; \
+ org.xml.sax.helpers; \
+ version=\"1.6.0\"