[ https://issues.apache.org/jira/browse/KARAF-2807?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Work on KARAF-2807 started by Jean-Baptiste Onofré. > 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 > Assignee: Jean-Baptiste Onofré > Fix For: 3.0.1, 4.0.0 > > 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)