Package aQute.bnd.build
Class ProjectLauncher
- java.lang.Object
-
- aQute.bnd.osgi.Domain
-
- aQute.bnd.osgi.Processor
-
- aQute.bnd.build.ProjectLauncher
-
- All Implemented Interfaces:
Constants,Registry,aQute.service.reporter.Report,aQute.service.reporter.Reporter,java.io.Closeable,java.lang.AutoCloseable,java.lang.Iterable<java.lang.String>
- Direct Known Subclasses:
JUnitLauncher
public abstract class ProjectLauncher extends Processor
A Project Launcher is a base class to be extended by launchers. Launchers are JARs that launch a framework and install a number of bundles and then run the framework. A launcher jar must specify a Launcher-Class manifest header. This class is instantiated and cast to a LauncherPlugin. This plug in is then asked to provide a ProjectLauncher. This project launcher is then used by the project to run the code. Launchers must extend this class.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceProjectLauncher.NotificationListenerstatic classProjectLauncher.NotificationType-
Nested classes/interfaces inherited from class aQute.bnd.osgi.Processor
Processor.CL, Processor.FileLine
-
-
Field Summary
Fields Modifier and Type Field Description static intACTIVATOR_ERRORstatic intCANCELEDstatic intCUSTOM_LAUNCHERstatic intDUPLICATE_BUNDLEstatic java.lang.StringEMBEDDED_ACTIVATORprotected java.lang.Appendableerrstatic intERRORprotected java.io.InputStreaminstatic intNONEstatic intOKprotected java.lang.Appendableoutstatic intRESOLVE_ERRORstatic intSERVICESstatic intTIMEDOUTstatic intUPDATE_NEEDEDstatic intWARNING-
Fields inherited from class aQute.bnd.osgi.Processor
LIST_SPLITTER, log
-
Fields inherited from interface aQute.bnd.osgi.Constants
AUGMENT, AUGMENT_CAPABILITY_DIRECTIVE, AUGMENT_RANGE_ATTRIBUTE, AUGMENT_REQUIREMENT_DIRECTIVE, BASELINE, BASELINEREPO, BLUEPRINT_TIMEOUT_ATTRIBUTE, BLUEPRINT_WAIT_FOR_DEPENDENCIES_ATTRIBUTE, BND_ADDXMLTOTEST, BND_LASTMODIFIED, BNDDRIVER, BNDDRIVER_ANT, BNDDRIVER_BND, BNDDRIVER_ECLIPSE, BNDDRIVER_GRADLE, BNDDRIVER_GRADLE_NATIVE, BNDDRIVER_INTELLIJ, BNDDRIVER_MAVEN, BNDDRIVER_OSMORC, BNDDRIVER_SBT, BUILDFILES, BUILDPACKAGES, BUILDPATH, BUILDREPO, BUMPPOLICY, BUNDLE_ACTIVATIONPOLICY, BUNDLE_ACTIVATOR, BUNDLE_BLUEPRINT, BUNDLE_CATEGORY, BUNDLE_CLASSPATH, BUNDLE_CONTACTADDRESS, BUNDLE_CONTRIBUTORS, BUNDLE_COPYRIGHT, BUNDLE_DESCRIPTION, BUNDLE_DEVELOPERS, BUNDLE_DOCURL, BUNDLE_ICON, BUNDLE_LICENSE, BUNDLE_LOCALIZATION, BUNDLE_MANIFESTVERSION, BUNDLE_NAME, BUNDLE_NATIVECODE, BUNDLE_REQUIREDEXECUTIONENVIRONMENT, BUNDLE_SCM, BUNDLE_SPECIFIC_HEADERS, BUNDLE_SYMBOLIC_NAME_ATTRIBUTE, BUNDLE_SYMBOLICNAME, BUNDLE_UPDATELOCATION, BUNDLE_VENDOR, BUNDLE_VERSION, BUNDLE_VERSION_ATTRIBUTE, CACHEDIR, CARDINALITY_DIRECTIVE, CHECK, CLASSPATH, COMMAND_DIRECTIVE, COMPILER_SOURCE, COMPILER_TARGET, COMPONENT_ACTIVATE, COMPONENT_CONFIGURATION_POLICY, COMPONENT_DEACTIVATE, COMPONENT_DESCRIPTORS, COMPONENT_DESIGNATE, COMPONENT_DESIGNATEFACTORY, COMPONENT_DYNAMIC, COMPONENT_ENABLED, COMPONENT_FACTORY, COMPONENT_GREEDY, COMPONENT_IMMEDIATE, COMPONENT_IMPLEMENTATION, COMPONENT_MODIFIED, COMPONENT_MULTIPLE, COMPONENT_NAME, COMPONENT_NAMESPACE, COMPONENT_OPTIONAL, COMPONENT_PROPERTIES, COMPONENT_PROVIDE, COMPONENT_SERVICEFACTORY, COMPONENT_VERSION, componentDirectives, CONDITIONAL_PACKAGE, CONDITIONALPACKAGE, CONDUIT, CONNECTION_SETTINGS, CONSUMER_POLICY, CONTRACT, CREATED_BY, CURRENT_PACKAGE, CURRENT_USES, CURRENT_VERSION, DEBUG, DEFAULT_BAR_EXTENSION, DEFAULT_BND_EXTENSION, DEFAULT_BNDRUN_EXTENSION, DEFAULT_CHARSET, DEFAULT_DO_NOT_COPY, DEFAULT_JAR_EXTENSION, DEFAULT_LAUNCHER_BSN, DEFAULT_PREPROCESSS_MATCHERS, DEFAULT_PROP_BIN_DIR, DEFAULT_PROP_SRC_DIR, DEFAULT_PROP_TARGET_DIR, DEFAULT_PROP_TESTBIN_DIR, DEFAULT_PROP_TESTSRC_DIR, DEFAULT_TESTER_BSN, DEPENDSON, DEPLOY, DEPLOYREPO, DESCRIPTION_ATTRIBUTE, DIFFIGNORE, DIFFPACKAGES, DIGESTS, directives, DISTRO, DONOTCOPY, DSANNOTATIONS, DSANNOTATIONS_OPTIONS, DUPLICATE_MARKER, DYNAMICIMPORT_PACKAGE, EEPROFILE, EEPROFILE_AUTO_ATTRIBUTE, EFFECTIVE_DIRECTIVE, EMBEDDED_REPO, EMPTY, EMPTY_HEADER, EXCLUDE_DIRECTIVE, EXPERIMENTS, EXPORT, EXPORT_CONTENTS, EXPORT_PACKAGE, EXPORT_SERVICE, EXPORTTYPE, EXTENSION, EXTENSION_DIRECTIVE, FAIL_OK, FILTER_DIRECTIVE, FIXUPMESSAGES, FIXUPMESSAGES_IS_DIRECTIVE, FIXUPMESSAGES_IS_ERROR, FIXUPMESSAGES_IS_IGNORE, FIXUPMESSAGES_IS_WARNING, FIXUPMESSAGES_REPLACE_DIRECTIVE, FIXUPMESSAGES_RESTRICT_DIRECTIVE, FRAGMENT_ATTACHMENT_DIRECTIVE, FRAGMENT_HOST, FROM_DIRECTIVE, GESTALT, GESTALT_BATCH, GESTALT_CI, GESTALT_INTERACTIVE, GESTALT_OFFLINE, GESTALT_SHELL, GROUPID, headers, IGNORE_PACKAGE, IGNORE_STANDALONE, IMPORT_DIRECTIVE, IMPORT_PACKAGE, IMPORT_PRIVATE, IMPORT_REFERENCE, IMPORT_SERVICE, importDirectives, INCLUDE, INCLUDE_DIRECTIVE, INCLUDE_RESOURCE, INCLUDERESOURCE, INIT, INTERNAL_EXPORTED_DIRECTIVE, INTERNAL_SOURCE_DIRECTIVE, INVALIDFILENAMES, JAVA, JAVA_DEBUG, JAVAAGENT, JAVAC, JAVAC_PROFILE, JAVAC_SOURCE, JAVAC_TARGET, JIDENTIFIER, KEYSTORE_LOCATION_DIRECTIVE, KEYSTORE_PASSWORD_DIRECTIVE, KEYSTORE_PROVIDER_DIRECTIVE, LANGUAGE_ATTRIBUTE, LAUNCHER_PLUGIN, LIB_DIRECTIVE, LINK_ATTRIBUTE, LITERAL_ATTRIBUTE, MAKE, MANDATORY_DIRECTIVE, MANIFEST, MANIFEST_NAME, MAVEN_RELEASE, META_PERSISTENCE, METAPACKAGES, METATYPE, METATYPE_ANNOTATIONS, METATYPE_ANNOTATIONS_OPTIONS, NAME_ATTRIBUTE, NAMESECTION, NAMESPACE_STEM, NO_IMPORT_DIRECTIVE, NOANNOTATIONS, NOBUILDINCACHE, NOBUNDLES, NODEFAULTVERSION, NOEE, NOEXTRAHEADERS, NOJUNIT, NOJUNITOSGI, NOMANIFEST, NOUSES, OPTIONAL, options, OSNAME_ATTRIBUTE, OSVERSION_ATTRIBUTE, OUTPUT, OUTPUTMASK, PACKAGE, PACKAGE_JPM, PACKAGEINFOTYPE, PATH_DIRECTIVE, PEDANTIC, PLUGIN, PLUGINPATH, PLUGINPATH_SHA1_ATTR, PLUGINPATH_URL_ATTR, POM, PREPROCESSMATCHERS, PRESENCE_DIRECTIVE, PRIVATE_DIRECTIVE, PRIVATE_PACKAGE, PRIVATEPACKAGE, PROCESSOR_ATTRIBUTE, PROFILE, PROVIDE_CAPABILITY, PROVIDE_DIRECTIVE, PROVIDER_POLICY, PROVIDER_TYPE_DIRECTIVE, RELEASEREPO, REMOVE_ATTRIBUTE_DIRECTIVE, REMOVEHEADERS, REPORTNEWER, REPOSITORIES, REQUIRE_BND, REQUIRE_BUNDLE, REQUIRE_CAPABILITY, RESOLUTION, RESOLUTION_DIRECTIVE, RESOLUTION_DYNAMIC, RESOLVE, RESOURCEONLY, RUNBLACKLIST, RUNBUILDS, RUNBUNDLES, RUNEE, RUNENV, RUNFRAMEWORK, RUNFRAMEWORK_NONE, RUNFRAMEWORK_SERVICES, RUNFW, RUNJDB, RUNKEEP, RUNNOREFERENCES, RUNPATH, RUNPATH_LAUNCHER_DIRECTIVE, RUNPATH_MAIN_DIRECTIVE, RUNPROGRAMARGS, RUNPROPERTIES, RUNPROVIDEDCAPABILITIES, RUNREMOTE, RUNREPOS, RUNREQUIRE, RUNREQUIRES, RUNSTORAGE, RUNSYSTEMCAPABILITIES, RUNSYSTEMPACKAGES, RUNTIMEOUT, RUNTRACE, RUNVM, SAVEMANIFEST, SELECTION_FILTER_ATTRIBUTE, SERVICE_COMPONENT, SET_COMPONENT_DIRECTIVES, SET_COMPONENT_DIRECTIVES_1_1, SET_COMPONENT_DIRECTIVES_1_2, SIGN, SIGN_PASSWORD_DIRECTIVE, SIGNATURE_TEST, SINGLETON_DIRECTIVE, SIZE_ATTRIBUTE, SNAPSHOT, SOURCEPATH, SOURCES, SPECIFICATION_VERSION, SPLIT_PACKAGE_DIRECTIVE, STANDALONE, STRICT, SUB, SYSTEMPROPERTIES, TESTCASES, TESTCONTINUOUS, TESTER, TESTER_PLUGIN, TESTPACKAGES, TESTPATH, TESTREPORT, TESTSOURCES, TESTSUITES, TESTUNRESOLVED, TOOL, TSTAMP, UNDERTEST, UPTO, USES_DIRECTIVE, USES_USES, VALID_PROPERTY_TYPES, VERBOSE, VERSION_ATTR_HASH, VERSION_ATTR_LATEST, VERSION_ATTR_PROJECT, VERSION_ATTR_SNAPSHOT, VERSION_ATTRIBUTE, VERSION_FILTER, VISIBILITY_DIRECTIVE, WAB, WABLIB, WORKINGSET, WORKINGSET_MEMBER
-
-
Constructor Summary
Constructors Constructor Description ProjectLauncher(Project project)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description booleanaddActivator(java.lang.String e)voidaddClasspath(Container container)protected voidaddClasspath(java.util.Collection<Container> path)voidaddDefault(java.lang.String defaultSpec)Add the specification for a set of bundles the runpath if it does not already is included.voidaddRunBundle(java.lang.String f)voidaddRunProgramArgs(java.lang.String arg)voidaddRunVM(java.lang.String arg)voidcalculatedProperties(java.util.Map<java.lang.String,java.lang.Object> properties)This method should go to the ProjectLaunchervoidcancel()voidcleanup()Is called after the process exists.Jarexecutable()Create a self executable.java.util.Collection<java.lang.String>getActivators()java.util.Collection<java.lang.String>getArguments()Deprecated.java.util.Collection<java.lang.String>getClasspath()java.io.FilegetCwd()abstract java.lang.StringgetMainTypeName()java.util.Set<ProjectLauncher.NotificationListener>getNotificationListeners()ProjectgetProject()java.util.Collection<java.lang.String>getRunBundles()java.util.Map<java.lang.String,java.lang.String>getRunEnv()intgetRunFramework()Either NONE or SERVICES to indicate how the remote end launches.java.lang.StringgetRunJdb()java.util.List<java.lang.String>getRunpath()java.util.Collection<java.lang.String>getRunProgramArgs()java.util.Map<java.lang.String,java.lang.String>getRunProperties()java.util.List<? extends RunSession>getRunSessions()Get the run sessions.java.util.Collection<java.lang.String>getRunVM()java.io.FilegetStorageDir()java.lang.StringgetSystemCapabilities()ParametersgetSystemCapabilitiesParameters()java.util.Map<java.lang.String,? extends java.util.Map<java.lang.String,java.lang.String>>getSystemPackages()longgetTimeout()booleangetTrace()protected intinvoke(java.lang.Class<?> main, java.lang.String[] args)booleanisKeep()intlaunch()abstract voidprepare()Should be called when all the changes to the launchers are set.voidregisterForNotifications(ProjectLauncher.NotificationListener listener)protected voidreportResult(int result)voidsetCwd(java.io.File cwd)voidsetKeep(boolean keep)voidsetRunFramework(int n)voidsetStreams(java.lang.Appendable out, java.lang.Appendable err)Set the stderr and stdout streams for the output process.voidsetTimeout(long timeout, java.util.concurrent.TimeUnit unit)voidsetTrace(boolean level)intstart(java.lang.ClassLoader parent)abstract voidupdate()protected voidupdateFromProject()Collect all the aspect from the project and set the local fields from them.voidwrite(java.lang.String text)Write text to the debugged process as if it came from stdin.-
Methods inherited from class aQute.bnd.osgi.Processor
_basedir, _fileuri, _findfile, _frange, _native_capability, _propertiesdir, _propertiesname, _random, _thisfile, _uri, addBasicPlugin, addClose, addExtensions, addIncluded, addProperties, addProperties, append, appendPath, begin, beginHandleErrors, check, clear, close, concat, customize, doAttrbutes, doIncludeFile, doIncludeFile, endHandleErrors, error, error, exception, exists, findHeader, findHeader, findHeader, forceRefresh, formatArrays, get, get, getBase, getBaseURI, getClass, getDuration, getErrors, getExecutor, getFile, getFile, getFlattenedProperties, getFlattenedProperties, getHeader, getHeader, getHeader, getHeader, getIncluded, getInfo, getInfo, getJarFromName, getLine, getLoader, getLocation, getLogger, getMacroDomains, getManifestAsProperties, getMergedParameters, getParent, getPlugin, getPlugins, getPlugins, getProperties, getPropertiesFile, getProperty, getProperty, getProperty, getPropertyKeys, getReplacer, getScheduledExecutor, getSettings, getTop, getUnprocessedProperty, getWarnings, is, isDuplicate, isExceptions, isFailOk, isMissingPlugin, isOk, isPedantic, isPerfect, isTrace, isTrue, iterator, join, join, join, join, join, keySet, lastModified, loadPlugins, loadProperties, makePrintable, merge, mergeLocalProperties, mergeProperties, mergeProperties, mergeProperties, mergeProperties, newHashMap, newList, newList, newMap, newMap, newSet, newSet, normalize, normalize, parseHeader, parseHeader, printClause, printClauses, printClauses, printExceptionSummary, printStackTrace, progress, progress, propertiesChanged, quote, read, refresh, removeBasicPlugin, removeClose, removeDuplicateMarker, replaceAll, replaceExtension, report, report, set, setBase, setExceptions, setFileMustExist, setForceLocal, setParent, setPedantic, setProperties, setProperties, setProperties, setProperties, setProperty, setTypeSpecificPlugins, signal, since, split, split, split, toFullHeaderPattern, toString, trace, unsetProperty, updateModified, use, warning
-
Methods inherited from class aQute.bnd.osgi.Domain
copyFrom, domain, domain, domain, domain, domain, getBundleActivator, getBundleCategory, getBundleClasspath, getBundleClassPath, getBundleContactAddress, getBundleCopyright, getBundleDescription, getBundleDocURL, getBundleName, getBundleNative, getBundleRequiredExecutionEnvironment, getBundleSymbolicName, getBundleVendor, getBundleVersion, getDynamicImportPackage, getExportContents, getExportPackage, getFragmentHost, getIcon, getImportPackage, getIncludeResource, getParameters, getParameters, getParameters, getParameters, getPrivatePackage, getProvideCapability, getRequireBundle, getRequireCapability, getRunblacklist, getRunee, isSources, setAugment, setBundleActivator, setBundleClasspath, setBundleRequiredExecutionEnvironment, setBundleSymbolicName, setBundleVersion, setBundleVersion, setConditionalPackage, setExportPackage, setFailOk, setImportPackage, setIncludeResource, setPrivatePackage, setRunblacklist, setRunee, setRunfw, setRunRequires, setSources, setTranslation, translate, translate
-
-
-
-
Field Detail
-
out
protected java.lang.Appendable out
-
err
protected java.lang.Appendable err
-
in
protected java.io.InputStream in
-
SERVICES
public static final int SERVICES
- See Also:
- Constant Field Values
-
NONE
public static final int NONE
- See Also:
- Constant Field Values
-
OK
public static final int OK
- See Also:
- Constant Field Values
-
WARNING
public static final int WARNING
- See Also:
- Constant Field Values
-
ERROR
public static final int ERROR
- See Also:
- Constant Field Values
-
TIMEDOUT
public static final int TIMEDOUT
- See Also:
- Constant Field Values
-
UPDATE_NEEDED
public static final int UPDATE_NEEDED
- See Also:
- Constant Field Values
-
CANCELED
public static final int CANCELED
- See Also:
- Constant Field Values
-
DUPLICATE_BUNDLE
public static final int DUPLICATE_BUNDLE
- See Also:
- Constant Field Values
-
RESOLVE_ERROR
public static final int RESOLVE_ERROR
- See Also:
- Constant Field Values
-
ACTIVATOR_ERROR
public static final int ACTIVATOR_ERROR
- See Also:
- Constant Field Values
-
CUSTOM_LAUNCHER
public static final int CUSTOM_LAUNCHER
- See Also:
- Constant Field Values
-
EMBEDDED_ACTIVATOR
public static final java.lang.String EMBEDDED_ACTIVATOR
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
ProjectLauncher
public ProjectLauncher(Project project) throws java.lang.Exception
- Throws:
java.lang.Exception
-
-
Method Detail
-
updateFromProject
protected void updateFromProject() throws java.lang.ExceptionCollect all the aspect from the project and set the local fields from them. Should be called- Throws:
java.lang.Exception
-
addClasspath
public void addClasspath(Container container) throws java.lang.Exception
- Throws:
java.lang.Exception
-
addClasspath
protected void addClasspath(java.util.Collection<Container> path) throws java.lang.Exception
- Throws:
java.lang.Exception
-
addRunBundle
public void addRunBundle(java.lang.String f)
-
getRunBundles
public java.util.Collection<java.lang.String> getRunBundles()
-
addRunVM
public void addRunVM(java.lang.String arg)
-
addRunProgramArgs
public void addRunProgramArgs(java.lang.String arg)
-
getRunpath
public java.util.List<java.lang.String> getRunpath()
-
getClasspath
public java.util.Collection<java.lang.String> getClasspath()
-
getRunVM
public java.util.Collection<java.lang.String> getRunVM()
-
getArguments
@Deprecated public java.util.Collection<java.lang.String> getArguments()
Deprecated.
-
getRunProgramArgs
public java.util.Collection<java.lang.String> getRunProgramArgs()
-
getRunProperties
public java.util.Map<java.lang.String,java.lang.String> getRunProperties()
-
getStorageDir
public java.io.File getStorageDir()
-
getMainTypeName
public abstract java.lang.String getMainTypeName()
-
update
public abstract void update() throws java.lang.Exception- Throws:
java.lang.Exception
-
launch
public int launch() throws java.lang.Exception- Throws:
java.lang.Exception
-
start
public int start(java.lang.ClassLoader parent) throws java.lang.Exception- Throws:
java.lang.Exception
-
invoke
protected int invoke(java.lang.Class<?> main, java.lang.String[] args) throws java.lang.Exception- Throws:
java.lang.Exception
-
cleanup
public void cleanup()
Is called after the process exists. Can you be used to cleanup the properties file.
-
reportResult
protected void reportResult(int result)
-
setTimeout
public void setTimeout(long timeout, java.util.concurrent.TimeUnit unit)
-
getTimeout
public long getTimeout()
-
cancel
public void cancel() throws java.lang.Exception- Throws:
java.lang.Exception
-
getSystemPackages
public java.util.Map<java.lang.String,? extends java.util.Map<java.lang.String,java.lang.String>> getSystemPackages()
-
getSystemCapabilities
public java.lang.String getSystemCapabilities()
-
getSystemCapabilitiesParameters
public Parameters getSystemCapabilitiesParameters()
-
setKeep
public void setKeep(boolean keep)
-
isKeep
public boolean isKeep()
-
getTrace
public boolean getTrace()
-
prepare
public abstract void prepare() throws java.lang.ExceptionShould be called when all the changes to the launchers are set. Will calculate whatever is necessary for the launcher.- Throws:
java.lang.Exception
-
getProject
public Project getProject()
-
addActivator
public boolean addActivator(java.lang.String e)
-
getActivators
public java.util.Collection<java.lang.String> getActivators()
-
getRunFramework
public int getRunFramework()
Either NONE or SERVICES to indicate how the remote end launches. NONE means it should not use the classpath to run a framework. This likely requires some dummy framework support. SERVICES means it should load the framework from the claspath.
-
setRunFramework
public void setRunFramework(int n)
-
addDefault
public void addDefault(java.lang.String defaultSpec) throws java.lang.ExceptionAdd the specification for a set of bundles the runpath if it does not already is included. This can be used by subclasses to ensure the proper jars are on the classpath.- Parameters:
defaultSpec- The default spec for default jars- Throws:
java.lang.Exception
-
executable
public Jar executable() throws java.lang.Exception
Create a self executable.- Throws:
java.lang.Exception
-
getCwd
public java.io.File getCwd()
-
setCwd
public void setCwd(java.io.File cwd)
-
getRunJdb
public java.lang.String getRunJdb()
-
getRunEnv
public java.util.Map<java.lang.String,java.lang.String> getRunEnv()
-
registerForNotifications
public void registerForNotifications(ProjectLauncher.NotificationListener listener)
-
getNotificationListeners
public java.util.Set<ProjectLauncher.NotificationListener> getNotificationListeners()
-
setStreams
public void setStreams(java.lang.Appendable out, java.lang.Appendable err)Set the stderr and stdout streams for the output process. The debugged process must append its output (i.e. write operation in the process under debug) to the given appendables.- Parameters:
out- std outerr- std err
-
write
public void write(java.lang.String text) throws java.lang.ExceptionWrite text to the debugged process as if it came from stdin.- Parameters:
text- the text to write- Throws:
java.lang.Exception
-
getRunSessions
public java.util.List<? extends RunSession> getRunSessions() throws java.lang.Exception
Get the run sessions. If this return null, then launch on this object should be used, otherwise each returned object provides a remote session.- Throws:
java.lang.Exception
-
calculatedProperties
public void calculatedProperties(java.util.Map<java.lang.String,java.lang.Object> properties) throws java.lang.ExceptionThis method should go to the ProjectLauncher- Throws:
java.lang.Exception
-
-