You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by gn...@apache.org on 2013/10/04 14:47:12 UTC
svn commit: r1529147 - in /karaf/branches/karaf-2.x: ./
assemblies/apache-karaf/ assemblies/apache-karaf/src/main/descriptors/
assemblies/apache-karaf/src/main/filtered-resources/etc/
assemblies/features/standard/src/main/resources/ client/ shell/conso...
Author: gnodet
Date: Fri Oct 4 12:47:11 2013
New Revision: 1529147
URL: http://svn.apache.org/r1529147
Log:
[KARAF-2501] Break some bundle dependencies in the console
Added:
karaf/branches/karaf-2.x/shell/ssh/src/main/resources/karaf.key
- copied, changed from r1529092, karaf/branches/karaf-2.x/shell/console/src/main/resources/karaf.key
Removed:
karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/felix/gogo/runtime/Closure.java
karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Activator.java
karaf/branches/karaf-2.x/shell/console/src/main/resources/karaf.key
Modified:
karaf/branches/karaf-2.x/assemblies/apache-karaf/pom.xml
karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/unix-bin-release.xml
karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/unix-minimal-bin-release.xml
karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/windows-bin-release.xml
karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/windows-minimal-bin-release.xml
karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/filtered-resources/etc/startup.properties
karaf/branches/karaf-2.x/assemblies/features/standard/src/main/resources/features.xml
karaf/branches/karaf-2.x/client/pom.xml
karaf/branches/karaf-2.x/pom.xml
karaf/branches/karaf-2.x/shell/console/pom.xml
karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandNamesCompleter.java
karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandsCompleter.java
karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/CommandListHelpProvider.java
karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SingleCommandHelpProvider.java
karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java
karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java
karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java
karaf/branches/karaf-2.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
Modified: karaf/branches/karaf-2.x/assemblies/apache-karaf/pom.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/assemblies/apache-karaf/pom.xml?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/assemblies/apache-karaf/pom.xml (original)
+++ karaf/branches/karaf-2.x/assemblies/apache-karaf/pom.xml Fri Oct 4 12:47:11 2013
@@ -235,6 +235,10 @@
<artifactId>org.apache.felix.fileinstall</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.gogo.runtime</artifactId>
+ </dependency>
+ <dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
</dependency>
Modified: karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/unix-bin-release.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/unix-bin-release.xml?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/unix-bin-release.xml (original)
+++ karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/unix-bin-release.xml Fri Oct 4 12:47:11 2013
@@ -144,6 +144,8 @@
<include>org.apache.felix:org.apache.felix.configadmin</include>
<include>org.apache.felix:org.apache.felix.framework</include>
<include>org.apache.felix:org.apache.felix.fileinstall</include>
+ <include>org.apache.felix:org.apache.felix.framework.security</include>
+ <include>org.apache.felix:org.apache.felix.gogo.runtime</include>
</includes>
</dependencySet>
<dependencySet>
Modified: karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/unix-minimal-bin-release.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/unix-minimal-bin-release.xml?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/unix-minimal-bin-release.xml (original)
+++ karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/unix-minimal-bin-release.xml Fri Oct 4 12:47:11 2013
@@ -128,6 +128,7 @@
<include>org.apache.felix:org.apache.felix.configadmin</include>
<include>org.apache.felix:org.apache.felix.framework</include>
<include>org.apache.felix:org.apache.felix.fileinstall</include>
+ <include>org.apache.felix:org.apache.felix.gogo.runtime</include>
</includes>
</dependencySet>
<dependencySet>
Modified: karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/windows-bin-release.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/windows-bin-release.xml?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/windows-bin-release.xml (original)
+++ karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/windows-bin-release.xml Fri Oct 4 12:47:11 2013
@@ -144,6 +144,8 @@
<include>org.apache.felix:org.apache.felix.configadmin</include>
<include>org.apache.felix:org.apache.felix.framework</include>
<include>org.apache.felix:org.apache.felix.fileinstall</include>
+ <include>org.apache.felix:org.apache.felix.framework.security</include>
+ <include>org.apache.felix:org.apache.felix.gogo.runtime</include>
</includes>
</dependencySet>
<dependencySet>
Modified: karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/windows-minimal-bin-release.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/windows-minimal-bin-release.xml?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/windows-minimal-bin-release.xml (original)
+++ karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/descriptors/windows-minimal-bin-release.xml Fri Oct 4 12:47:11 2013
@@ -129,6 +129,7 @@
<include>org.apache.felix:org.apache.felix.configadmin</include>
<include>org.apache.felix:org.apache.felix.framework</include>
<include>org.apache.felix:org.apache.felix.fileinstall</include>
+ <include>org.apache.felix:org.apache.felix.gogo.runtime</include>
</includes>
</dependencySet>
<dependencySet>
Modified: karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/filtered-resources/etc/startup.properties
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/filtered-resources/etc/startup.properties?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/filtered-resources/etc/startup.properties (original)
+++ karaf/branches/karaf-2.x/assemblies/apache-karaf/src/main/filtered-resources/etc/startup.properties Fri Oct 4 12:47:11 2013
@@ -41,6 +41,7 @@ org/apache/aries/blueprint/org.apache.ar
org/apache/aries/blueprint/org.apache.aries.blueprint.core/${aries.blueprint.core.version}/org.apache.aries.blueprint.core-${aries.blueprint.core.version}.jar=20
org/apache/aries/blueprint/org.apache.aries.blueprint.cm/${aries.blueprint.cm.version}/org.apache.aries.blueprint.cm-${aries.blueprint.cm.version}.jar=20
+org/apache/felix/org.apache.felix.gogo.runtime/${felix.gogo.version}/org.apache.felix.gogo.runtime-${felix.gogo.version}.jar=25
org/apache/karaf/shell/org.apache.karaf.shell.console/${project.version}/org.apache.karaf.shell.console-${project.version}.jar=25
org/apache/karaf/shell/org.apache.karaf.shell.osgi/${project.version}/org.apache.karaf.shell.osgi-${project.version}.jar=30
Modified: karaf/branches/karaf-2.x/assemblies/features/standard/src/main/resources/features.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/assemblies/features/standard/src/main/resources/features.xml?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/assemblies/features/standard/src/main/resources/features.xml (original)
+++ karaf/branches/karaf-2.x/assemblies/features/standard/src/main/resources/features.xml Fri Oct 4 12:47:11 2013
@@ -32,6 +32,7 @@
<bundle start-level="20">mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.api/${aries.blueprint.api.version}</bundle>
<bundle start-level="20">mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.core/${aries.blueprint.core.version}</bundle>
<bundle start-level="20">mvn:org.apache.aries.blueprint/org.apache.aries.blueprint.cm/${aries.blueprint.cm.version}</bundle>
+ <bundle start-level="30">mvn:org.apache.felix/org.apache.felix.gogo.runtime/${felix.gogo.version}</bundle>
<bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.console/${project.version}</bundle>
<bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.osgi/${project.version}</bundle>
<bundle start-level="30">mvn:org.apache.karaf.shell/org.apache.karaf.shell.log/${project.version}</bundle>
Modified: karaf/branches/karaf-2.x/client/pom.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/client/pom.xml?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/client/pom.xml (original)
+++ karaf/branches/karaf-2.x/client/pom.xml Fri Oct 4 12:47:11 2013
@@ -82,7 +82,7 @@
META-INF;-split-package:=merge-first
</Private-Package>
<Include-Resource>
- ../shell/console/src/main/resources/karaf.key,
+ ../shell/ssh/src/main/resources/karaf.key,
{maven-resources}
</Include-Resource>
<Import-Package>!*</Import-Package>
Modified: karaf/branches/karaf-2.x/pom.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/pom.xml?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/pom.xml (original)
+++ karaf/branches/karaf-2.x/pom.xml Fri Oct 4 12:47:11 2013
@@ -574,6 +574,11 @@
</dependency>
<dependency>
<groupId>org.apache.felix</groupId>
+ <artifactId>org.apache.felix.gogo.runtime</artifactId>
+ <version>${felix.gogo.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.fileinstall</artifactId>
<version>${felix.fileinstall.version}</version>
<exclusions>
Modified: karaf/branches/karaf-2.x/shell/console/pom.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/console/pom.xml?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/console/pom.xml (original)
+++ karaf/branches/karaf-2.x/shell/console/pom.xml Fri Oct 4 12:47:11 2013
@@ -115,15 +115,14 @@
<configuration>
<instructions>
<Import-Package>
+ !org.apache.felix.gogo.runtime.*,
org.osgi.service.event;resolution:=optional,
org.apache.karaf.branding;resolution:=optional,
org.apache.sshd.agent*;resolution:=optional,
*
</Import-Package>
<Export-Package>
- org.apache.felix.gogo*;version=${felix.gogo.version};-split-package:=merge-first,
- org.apache.felix.service.command;version=${felix.gogo.version};status=provisional;mandatory:=status,
- org.apache.felix.service.threadio;version=${felix.gogo.version};status=provisional;mandatory:=status,
+ org.apache.felix.gogo.commands.*;version=${felix.gogo.version};-split-package:=merge-first,
org.apache.karaf.shell.console*;version=${project.version},
org.fusesource.jansi;version=${jansi.version};-split-package:=merge-first,
jline*;version=${jline.version},
@@ -140,17 +139,21 @@
META-INF/native/windows64/jansi.dll;osname=Win32;processor=x86-64,
*
</Bundle-NativeCode>
+ <!--
<Bundle-Activator>
org.apache.karaf.shell.console.jline.Activator
</Bundle-Activator>
+ -->
<Main-Class>
org.apache.karaf.shell.console.Main
</Main-Class>
+ <!--
<Export-Service>
org.apache.felix.service.threadio.ThreadIO,
org.apache.felix.service.command.CommandProcessor,
org.apache.felix.service.command.Converter
</Export-Service>
+ -->
</instructions>
<unpackBundle>true</unpackBundle>
</configuration>
Modified: karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java (original)
+++ karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/felix/gogo/commands/basic/DefaultActionPreparator.java Fri Oct 4 12:47:11 2013
@@ -79,6 +79,17 @@ public class DefaultActionPreparator imp
Map<Option, Field> options = new HashMap<Option, Field>();
Map<Argument, Field> arguments = new HashMap<Argument, Field>();
List<Argument> orderedArguments = new ArrayList<Argument>();
+ // It's a shame, but gogo converts string to numbers if possible
+ // and blueprint does not do the opposite conversion, so transform
+ // them back before preparing
+ List<Object> newParams = new ArrayList<Object>(params.size());
+ for (Object o : params) {
+ if (o instanceof Number) {
+ o = o.toString();
+ }
+ newParams.add(o);
+ }
+ params = newParams;
// Introspect
for (Class type = action.getClass(); type != null; type = type.getSuperclass()) {
for (Field field : type.getDeclaredFields()) {
Modified: karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandNamesCompleter.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandNamesCompleter.java?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandNamesCompleter.java (original)
+++ karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandNamesCompleter.java Fri Oct 4 12:47:11 2013
@@ -24,7 +24,6 @@ import java.util.List;
import java.util.Set;
import java.util.concurrent.CopyOnWriteArraySet;
-import org.apache.felix.gogo.runtime.CommandSessionImpl;
import org.apache.felix.service.command.CommandProcessor;
import org.apache.felix.service.command.CommandSession;
import org.apache.karaf.shell.console.Completer;
@@ -39,6 +38,8 @@ import org.osgi.framework.ServiceListene
*/
public class CommandNamesCompleter implements Completer {
+ public static final String COMMANDS = ".commands";
+
private CommandSession session;
private final Set<String> commands = new CopyOnWriteArraySet<String>();
@@ -69,7 +70,7 @@ public class CommandNamesCompleter imple
protected void checkData() {
if (commands.isEmpty()) {
- Set<String> names = new HashSet<String>((Set<String>) session.get(CommandSessionImpl.COMMANDS));
+ Set<String> names = new HashSet<String>((Set<String>) session.get(COMMANDS));
for (String name : names) {
commands.add(name);
if (name.indexOf(':') > 0) {
Modified: karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandsCompleter.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandsCompleter.java?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandsCompleter.java (original)
+++ karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/completer/CommandsCompleter.java Fri Oct 4 12:47:11 2013
@@ -26,9 +26,6 @@ import java.util.List;
import java.util.Set;
import org.apache.felix.gogo.commands.basic.AbstractCommand;
-import org.apache.felix.gogo.runtime.Closure;
-import org.apache.felix.gogo.runtime.CommandProxy;
-import org.apache.felix.gogo.runtime.CommandSessionImpl;
import org.apache.felix.service.command.CommandSession;
import org.apache.felix.service.command.Function;
import org.apache.karaf.shell.console.Completer;
@@ -44,6 +41,8 @@ import org.slf4j.LoggerFactory;
*/
public class CommandsCompleter implements Completer {
+ public static final String COMMANDS = ".commands";
+
private static final Logger LOGGER = LoggerFactory.getLogger(CommandsCompleter.class);
private CommandSession session;
@@ -72,7 +71,7 @@ public class CommandsCompleter implement
protected synchronized void checkData() {
// Copy the set to avoid concurrent modification exceptions
// TODO: fix that in gogo instead
- Set<String> names = new HashSet<String>((Set<String>) session.get(CommandSessionImpl.COMMANDS));
+ Set<String> names = new HashSet<String>((Set<String>) session.get(COMMANDS));
if (!names.equals(commands)) {
commands.clear();
completers.clear();
@@ -107,7 +106,7 @@ public class CommandsCompleter implement
Set<String> aliases = new HashSet<String>();
for (String var : vars) {
Object content = session.get(var);
- if (content instanceof Closure) {
+ if ("org.apache.felix.gogo.runtime.Closure".equals(content.getClass().getName())) {
aliases.add(var);
}
}
@@ -116,7 +115,7 @@ public class CommandsCompleter implement
protected Function unProxy(Function function) {
try {
- if (function instanceof CommandProxy) {
+ if ("org.apache.felix.gogo.runtime.CommandProxy".equals(function.getClass().getName())) {
Field contextField = function.getClass().getDeclaredField("context");
Field referenceField = function.getClass().getDeclaredField("reference");
contextField.setAccessible(true);
Modified: karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/CommandListHelpProvider.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/CommandListHelpProvider.java?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/CommandListHelpProvider.java (original)
+++ karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/CommandListHelpProvider.java Fri Oct 4 12:47:11 2013
@@ -31,7 +31,6 @@ import org.apache.felix.gogo.commands.Ac
import org.apache.felix.gogo.commands.Command;
import org.apache.felix.gogo.commands.basic.AbstractCommand;
import org.apache.felix.gogo.commands.basic.DefaultActionPreparator;
-import org.apache.felix.gogo.runtime.CommandSessionImpl;
import org.apache.felix.service.command.CommandSession;
import org.apache.felix.service.command.Function;
import org.apache.karaf.shell.console.HelpProvider;
@@ -42,6 +41,8 @@ import org.osgi.framework.ServiceReferen
public class CommandListHelpProvider implements HelpProvider {
+ public static final String COMMANDS = ".commands";
+
public String getHelp(CommandSession session, String path) {
if (path.indexOf('|') > 0) {
if (path.startsWith("command-list|")) {
@@ -57,7 +58,7 @@ public class CommandListHelpProvider imp
}
private SortedMap<String, String> getCommandDescriptions(CommandSession session, String command) {
- Set<String> names = (Set<String>) session.get(CommandSessionImpl.COMMANDS);
+ Set<String> names = (Set<String>) session.get(COMMANDS);
SortedMap<String,String> commands = new TreeMap<String,String>();
for (String name : names) {
if (command != null && !name.startsWith(command)) {
Modified: karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SingleCommandHelpProvider.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SingleCommandHelpProvider.java?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SingleCommandHelpProvider.java (original)
+++ karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/help/SingleCommandHelpProvider.java Fri Oct 4 12:47:11 2013
@@ -22,13 +22,14 @@ import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.util.Set;
-import org.apache.felix.gogo.runtime.CommandSessionImpl;
import org.apache.felix.service.command.CommandSession;
import org.apache.felix.service.threadio.ThreadIO;
import org.apache.karaf.shell.console.HelpProvider;
public class SingleCommandHelpProvider implements HelpProvider {
+ public static final String COMMANDS = ".commands";
+
private ThreadIO io;
public void setIo(ThreadIO io) {
@@ -43,7 +44,7 @@ public class SingleCommandHelpProvider i
return null;
}
}
- Set<String> names = (Set<String>) session.get(CommandSessionImpl.COMMANDS);
+ Set<String> names = (Set<String>) session.get(COMMANDS);
if (path != null && names.contains(path)) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
io.setStreams(new ByteArrayInputStream(new byte[0]), new PrintStream(baos, true), new PrintStream(baos, true));
Modified: karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java (original)
+++ karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/Console.java Fri Oct 4 12:47:11 2013
@@ -39,8 +39,6 @@ import jline.UnsupportedTerminal;
import jline.console.ConsoleReader;
import jline.console.history.PersistentHistory;
import org.apache.felix.gogo.commands.CommandException;
-import org.apache.felix.gogo.runtime.CommandNotFoundException;
-import org.apache.felix.gogo.runtime.Parser;
import org.apache.felix.service.command.CommandProcessor;
import org.apache.felix.service.command.CommandSession;
import org.apache.felix.service.command.Converter;
@@ -192,7 +190,8 @@ public class Console implements Runnable
private void logException(Throwable t) {
try {
- if (t instanceof CommandNotFoundException) {
+ boolean isCommandNotFound = "org.apache.felix.gogo.runtime.CommandNotFoundException".equals(t.getClass().getName());
+ if (isCommandNotFound) {
LOGGER.debug("Unknown command entered", t);
} else if (t instanceof CommandException) {
LOGGER.debug("Command exception (Undefined option, ...)", t);
@@ -202,12 +201,12 @@ public class Console implements Runnable
session.put(LAST_EXCEPTION, t);
if (t instanceof CommandException) {
session.getConsole().println(((CommandException) t).getNiceHelp());
- } else if (t instanceof CommandNotFoundException) {
+ } else if (isCommandNotFound) {
String str = Ansi.ansi()
.fg(Ansi.Color.RED)
.a("Command not found: ")
.a(Ansi.Attribute.INTENSITY_BOLD)
- .a(((CommandNotFoundException) t).getCommand())
+ .a(t.getClass().getMethod("getCommand").invoke(t))
.a(Ansi.Attribute.INTENSITY_BOLD_OFF)
.fg(Ansi.Color.DEFAULT).toString();
session.getConsole().println(str);
@@ -216,7 +215,7 @@ public class Console implements Runnable
session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
t.printStackTrace(session.getConsole());
session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
- } else if (!(t instanceof CommandException) && !(t instanceof CommandNotFoundException)) {
+ } else if (!(t instanceof CommandException) && !isCommandNotFound) {
session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
session.getConsole().println("Error executing command: "
+ (t.getMessage() != null ? t.getMessage() : t.getClass().getName()));
@@ -254,11 +253,16 @@ public class Console implements Runnable
}
}
try {
- new Parser(command).program();
+ Class<?> cl = CommandSession.class.getClassLoader().loadClass("org.apache.felix.gogo.runtime.Parser");
+ Object parser = cl.getConstructor(CharSequence.class).newInstance(command);
+ cl.getMethod("program").invoke(parser);
loop = false;
} catch (Exception e) {
loop = true;
first = false;
+ } catch (Throwable t) {
+ // Reflection problem ? just quit
+ loop = false;
}
}
return command;
Modified: karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java (original)
+++ karaf/branches/karaf-2.x/shell/console/src/main/java/org/apache/karaf/shell/console/jline/ConsoleFactory.java Fri Oct 4 12:47:11 2013
@@ -27,7 +27,6 @@ import java.net.URL;
import java.security.KeyPair;
import java.nio.charset.Charset;
import java.security.PrivilegedExceptionAction;
-import java.util.Hashtable;
import java.util.List;
import javax.security.auth.Subject;
@@ -54,7 +53,6 @@ public class ConsoleFactory {
Console console;
private boolean start;
private ServiceRegistration registration;
- private SshAgent local;
public void setBundleContext(BundleContext bundleContext) {
this.bundleContext = bundleContext;
@@ -112,8 +110,6 @@ public class ConsoleFactory {
}
protected void doStart(String user) throws Exception {
- String agentId = startAgent(user);
-
final Terminal terminal = terminalFactory.getTerminal();
// unwrap stream so it can be recognized by the terminal and wrapped to get
// special keys in windows
@@ -145,6 +141,10 @@ public class ConsoleFactory {
encoding,
callback);
CommandSession session = console.getSession();
+ for (Object o : System.getProperties().keySet()) {
+ String key = o.toString();
+ session.put(key, System.getProperty(key));
+ }
session.put("USER", user);
session.put("APPLICATION", System.getProperty("karaf.name", "root"));
session.put("#LINES", new Function() {
@@ -161,7 +161,8 @@ public class ConsoleFactory {
session.put("LC_CTYPE", ctype);
}
session.put(".jline.terminal", terminal);
- session.put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, agentId);
+
+ registration = bundleContext.registerService(CommandSession.class, session, null);
boolean delayconsole = Boolean.parseBoolean(System.getProperty("karaf.delay.console"));
if (delayconsole) {
@@ -171,20 +172,6 @@ public class ConsoleFactory {
}
}
- protected String startAgent(String user) {
- try {
- local = SshAgentLoader.load(bundleContext);
- String agentId = "local:" + user;
- Hashtable properties = new Hashtable();
- properties.put("id", agentId);
- registration = bundleContext.registerService(SshAgent.class.getName(), local, properties);
- return agentId;
- } catch (Throwable e) {
- LOGGER.warn("Error starting ssh agent for local console", e);
- return null;
- }
- }
-
protected void stop() throws Exception {
if (registration != null) {
registration.unregister();
Modified: karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java (original)
+++ karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/KarafAgentFactory.java Fri Oct 4 12:47:11 2013
@@ -19,25 +19,46 @@
package org.apache.karaf.shell.ssh;
import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInputStream;
+import java.net.URL;
+import java.security.KeyPair;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import org.apache.felix.service.command.CommandSession;
import org.apache.sshd.agent.SshAgent;
import org.apache.sshd.agent.SshAgentFactory;
import org.apache.sshd.agent.SshAgentServer;
import org.apache.sshd.agent.common.AgentDelegate;
+import org.apache.sshd.agent.local.AgentImpl;
import org.apache.sshd.agent.local.AgentServerProxy;
import org.apache.sshd.agent.local.ChannelAgentForwarding;
import org.apache.sshd.common.Channel;
import org.apache.sshd.common.NamedFactory;
import org.apache.sshd.common.Session;
import org.apache.sshd.server.session.ServerSession;
+import org.osgi.framework.BundleContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class KarafAgentFactory implements SshAgentFactory {
+ private static final Logger LOGGER = LoggerFactory.getLogger(KarafAgentFactory.class);
+
private final Map<String, AgentServerProxy> proxies = new ConcurrentHashMap<String, AgentServerProxy>();
private final Map<String, SshAgent> locals = new ConcurrentHashMap<String, SshAgent>();
+ private BundleContext bundleContext;
+
+ public BundleContext getBundleContext() {
+ return bundleContext;
+ }
+
+ public void setBundleContext(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ }
+
public NamedFactory<Channel> getChannelForwardingFactory() {
return new ChannelAgentForwarding.Factory();
}
@@ -75,23 +96,32 @@ public class KarafAgentFactory implement
};
}
- public void registerAgent(SshAgent agent, Map<String, ?> properties) {
- if (agent != null) {
- Object id = properties.get("id");
- if (id == null) {
- throw new IllegalStateException("Local agent can't be registered with no 'id' property");
- }
- locals.put(id.toString(), agent);
+ public void registerCommandSession(CommandSession session) {
+ try {
+ String user = (String) session.get("USER");
+ SshAgent agent = new AgentImpl();
+ URL url = bundleContext.getBundle().getResource("karaf.key");
+ InputStream is = url.openStream();
+ ObjectInputStream r = new ObjectInputStream(is);
+ KeyPair keyPair = (KeyPair) r.readObject();
+ agent.addIdentity(keyPair, "karaf");
+ String agentId = "local:" + user;
+ session.put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, agentId);
+ locals.put(agentId, agent);
+ } catch (Throwable e) {
+ LOGGER.warn("Error starting ssh agent for local console", e);
}
}
- public void unregisterAgent(SshAgent agent, Map<String, ?> properties) {
- if (agent != null) {
- Object id = properties.get("id");
- if (id == null) {
- throw new IllegalStateException("Local agent can't be unregistered with no 'id' property");
+ public void unregisterCommandSession(CommandSession session) {
+ try {
+ String agentId = (String) session.get(SshAgent.SSH_AUTHSOCKET_ENV_NAME);
+ session.put(SshAgent.SSH_AUTHSOCKET_ENV_NAME, null);
+ if (agentId != null) {
+ locals.remove(agentId);
}
- locals.remove(id.toString());
+ } catch (Throwable e) {
+ LOGGER.warn("Error stopping ssh agent for local console", e);
}
}
Modified: karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java (original)
+++ karaf/branches/karaf-2.x/shell/ssh/src/main/java/org/apache/karaf/shell/ssh/ShellCommandFactory.java Fri Oct 4 12:47:11 2013
@@ -123,7 +123,8 @@ public class ShellCommandFactory impleme
}
} catch (Throwable t) {
try {
- if (t instanceof CommandNotFoundException) {
+ boolean isCommandNotFound = "org.apache.felix.gogo.runtime.CommandNotFoundException".equals(t.getClass().getName());
+ if (isCommandNotFound) {
LOGGER.debug("Unknown command entered", t);
} else {
LOGGER.info("Exception caught while executing command", t);
@@ -131,12 +132,12 @@ public class ShellCommandFactory impleme
session.put(Console.LAST_EXCEPTION, t);
if (t instanceof CommandException) {
session.getConsole().println(((CommandException) t).getNiceHelp());
- } else if (t instanceof CommandNotFoundException) {
+ } else if (isCommandNotFound) {
String str = Ansi.ansi()
.fg(Ansi.Color.RED)
.a("Command not found: ")
.a(Ansi.Attribute.INTENSITY_BOLD)
- .a(((CommandNotFoundException) t).getCommand())
+ .a(t.getClass().getMethod("getCommand").invoke(t))
.a(Ansi.Attribute.INTENSITY_BOLD_OFF)
.fg(Ansi.Color.DEFAULT).toString();
session.getConsole().println(str);
@@ -146,7 +147,7 @@ public class ShellCommandFactory impleme
t.printStackTrace(session.getConsole());
session.getConsole().print(Ansi.ansi().fg(Ansi.Color.DEFAULT).toString());
}
- else if (!(t instanceof CommandException) && !(t instanceof CommandNotFoundException)) {
+ else if (!(t instanceof CommandException) && !isCommandNotFound) {
session.getConsole().print(Ansi.ansi().fg(Ansi.Color.RED).toString());
session.getConsole().println("Error executing command: "
+ (t.getMessage() != null ? t.getMessage() : t.getClass().getName()));
Modified: karaf/branches/karaf-2.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml?rev=1529147&r1=1529146&r2=1529147&view=diff
==============================================================================
--- karaf/branches/karaf-2.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml (original)
+++ karaf/branches/karaf-2.x/shell/ssh/src/main/resources/OSGI-INF/blueprint/shell-ssh.xml Fri Oct 4 12:47:11 2013
@@ -104,9 +104,11 @@
<property name="agentFactory" ref="agentFactory" />
</bean>
- <bean id="agentFactory" class="org.apache.karaf.shell.ssh.KarafAgentFactory" />
- <reference-list id="agents" interface="org.apache.sshd.agent.SshAgent" availability="optional" activation="eager">
- <reference-listener ref="agentFactory" bind-method="registerAgent" unbind-method="unregisterAgent" />
+ <bean id="agentFactory" class="org.apache.karaf.shell.ssh.KarafAgentFactory">
+ <property name="bundleContext" ref="blueprintBundleContext" />
+ </bean>
+ <reference-list id="commandSessions" interface="org.apache.felix.service.command.CommandSession" availability="optional" activation="eager">
+ <reference-listener ref="agentFactory" bind-method="registerCommandSession" unbind-method="unregisterCommandSession" />
</reference-list>
<bean id="keyPairProvider" class="org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider">
Copied: karaf/branches/karaf-2.x/shell/ssh/src/main/resources/karaf.key (from r1529092, karaf/branches/karaf-2.x/shell/console/src/main/resources/karaf.key)
URL: http://svn.apache.org/viewvc/karaf/branches/karaf-2.x/shell/ssh/src/main/resources/karaf.key?p2=karaf/branches/karaf-2.x/shell/ssh/src/main/resources/karaf.key&p1=karaf/branches/karaf-2.x/shell/console/src/main/resources/karaf.key&r1=1529092&r2=1529147&rev=1529147&view=diff
==============================================================================
(empty)