Rebecca Chan created KARAF-2807:
-----------------------------------
Summary: Unable to have multiple subshells in one bundle
Key: KARAF-2807
URL: https://issues.apache.org/jira/browse/KARAF-2807
Project: Karaf
Issue Type: Bug
Components: karaf-shell
Affects Versions: 3.0.0
Environment: JDK7, Aries Blueprint, karaf shell schema v1.1.0
Reporter: Rebecca Chan
Attachments: fixSubshell.patch
*PROBLEM:*
According to Karaf 3.0.0 release note, Karaf "groups" the commands by scope.
Each scope form a subshell. Users should be able to enter subshell directly by
typing the subshell name.
However, if commands with different scopes are packaged in one OSGI bundle,
only the scope of the first command in the blueprint xml file will be
registered as subshell.
For example, I have the following three commands in a OSGI bundle
{quote}
@Command(scope = "children", name = "boy", description = "boy's command")
public class BoyCommand extends OsgiCommandSupport {
}
@Command(scope = "children", name = "girl", description = "girl's command")
public class GirlCommand extends OsgiCommandSupport {
}
@Command(scope = "pet", name = "dog", description = "dog's command")
public class DogCommand extends OsgiCommandSupport {
}
{quote}
And they are in blueprint xml file.
{quote}
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
default-activation="lazy">
<command-bundle xmlns="http://karaf.apache.org/xmlns/shell/v1.1.0">
<command>
<action class="com.test.BoyCommand" />
</command>
<command>
<action class="com.test.GirlCommand" />
</command>
<command>
<action class="com.test.DogCommand" />
</command>
</command-bundle>
</blueprint>
{quote}
I can access children subshell directly by type "children" but I cannot acess
pet subshell by typing "pet"
*SUGGESTION:*
After looking into the source code of karaf 3.0.0, there is a bug around line
188 in org.apache.karaf.shell.console.commands.NamespaceHandler. If the schema
is not SHELL_NAMESPACE_1_0_0 or the action name does not contain the scope
name, the variable "scope" will be null and the subShellName will always be
".subshell.null". Therefore, if schema is not 1.0.0, only the scope of the
first defined command in the OSGI bundle will be registered as subshell in the
if statement.
A patch is attached. Please review if it is a proper fix to the bug
--
This message was sent by Atlassian JIRA
(v6.2#6252)