diff options
author | Omair Majid <[email protected]> | 2012-03-14 11:27:16 -0400 |
---|---|---|
committer | Omair Majid <[email protected]> | 2012-03-14 11:27:16 -0400 |
commit | bf89d620ace4a20270fee72285f9c4c9bfa6b345 (patch) | |
tree | bbeda7a0916ce754b66afaf0e98f1c2032722540 /netx/net/sourceforge | |
parent | 19038d58d1ee7981937a8de2014b9178d272e5cd (diff) |
Launch errors are not being printed to terminal
2012-03-14 Omair Majid <[email protected]>
Print exceptions to terminal when running in gui mode too.
* netx/net/sourceforge/jnlp/AbstractLaunchHandler.java: New file.
* netx/net/sourceforge/jnlp/DefaultLaunchHandler.java: Extend
AbstractLaunchHandler.
(DefaultLaunchHandler): New method.
(printMessage): Moved to parent class.
* netx/net/sourceforge/jnlp/GuiLaunchHandler.java: Extend
AbstractLaunchHandler.
(GuiLauchHandler): New method.
(launchError): Print the error too.
(launchWarning,validationError): Call parent's printMessage.
* netx/net/sourceforge/jnlp/LaunchException.java: Use standard java
exception chaining. This removes compatibility with pre-java 1.3 class
libraries.
(LaunchException(JNLPFile,Exception,String,String,String,String)): Pass
cause to parent so exceptions are chanined properly.
(LaunchException(String,Throwable),LaunchException(Throwable)): Call
parent's constructor.
(printStackTrace(PrintStream),printStackTrace(PrintWriter),getCause):
Removed. Use parent's implementation instead.
(getCauses): Removed.
* netx/net/sourceforge/jnlp/LaunchHandler.java
(validationError): Rename argument to clarify meaing.
* netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java
(initialize): Redirect output of all handlers to System.err.
* plugin/icedteanp/java/sun/applet/PluginAppletSecurityContext.java
(PluginAppletSecurityContext): Likewise.
* tests/netx/unit/net/sourceforge/jnlp/DefaultLaunchHandlerTest.java,
* tests/netx/unit/net/sourceforge/jnlp/LaunchExceptionTest.java: New
file. Contains tests.
Diffstat (limited to 'netx/net/sourceforge')
-rw-r--r-- | netx/net/sourceforge/jnlp/AbstractLaunchHandler.java | 84 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/DefaultLaunchHandler.java | 42 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/GuiLaunchHandler.java | 14 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/LaunchException.java | 76 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/LaunchHandler.java | 2 | ||||
-rw-r--r-- | netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java | 4 |
6 files changed, 110 insertions, 112 deletions
diff --git a/netx/net/sourceforge/jnlp/AbstractLaunchHandler.java b/netx/net/sourceforge/jnlp/AbstractLaunchHandler.java new file mode 100644 index 0000000..c9d5d70 --- /dev/null +++ b/netx/net/sourceforge/jnlp/AbstractLaunchHandler.java @@ -0,0 +1,84 @@ +/* AbstractLaunchHandler.java + Copyright (C) 2012 Red Hat, Inc. + +This file is part of IcedTea. + +IcedTea is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +IcedTea is distributed in the hope that it will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +General Public License for more details. + +You should have received a copy of the GNU General Public License +along with IcedTea; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package net.sourceforge.jnlp; + +import java.io.PrintStream; + +import net.sourceforge.jnlp.runtime.JNLPRuntime; + +public abstract class AbstractLaunchHandler implements LaunchHandler { + + protected final PrintStream outputStream; + + public AbstractLaunchHandler(PrintStream outputStream) { + this.outputStream = outputStream; + } + + /** + * Print a message + */ + protected void printMessage(LaunchException ex) { + StringBuilder result = new StringBuilder(); + result.append("netx: "); + result.append(ex.getCategory()); + if (ex.getSummary() != null) { + result.append(": "); + result.append(ex.getSummary()); + } + if (ex.getCause() != null) { + result.append(recursiveDescription(ex.getCause())); + } + outputStream.println(result); + + if (JNLPRuntime.isDebug()) { + ex.printStackTrace(outputStream); + } + } + + private String recursiveDescription(Throwable throwable) { + StringBuilder builder = new StringBuilder(); + builder.append(" ("); + builder.append(throwable.getMessage() == null ? "" : throwable.getMessage()); + if (throwable.getCause() != null) { + builder.append(recursiveDescription(throwable.getCause())); + } + builder.append(")"); + return builder.toString(); + } + +} diff --git a/netx/net/sourceforge/jnlp/DefaultLaunchHandler.java b/netx/net/sourceforge/jnlp/DefaultLaunchHandler.java index d52681f..98e98de 100644 --- a/netx/net/sourceforge/jnlp/DefaultLaunchHandler.java +++ b/netx/net/sourceforge/jnlp/DefaultLaunchHandler.java @@ -16,6 +16,8 @@ package net.sourceforge.jnlp; +import java.io.PrintStream; + import net.sourceforge.jnlp.runtime.*; /** @@ -26,7 +28,11 @@ import net.sourceforge.jnlp.runtime.*; * @author <a href="mailto:[email protected]">Jon A. Maxwell (JAM)</a> - initial author * @version $Revision: 1.1 $ */ -public class DefaultLaunchHandler implements LaunchHandler { +public class DefaultLaunchHandler extends AbstractLaunchHandler { + + public DefaultLaunchHandler(PrintStream out) { + super(out); + } /** * Called when the application could not be launched due to a @@ -57,8 +63,8 @@ public class DefaultLaunchHandler implements LaunchHandler { * * @return true to allow the application to continue, false to stop it. */ - public boolean validationError(LaunchException security) { - printMessage(security); + public boolean validationError(LaunchException error) { + printMessage(error); return true; } @@ -74,36 +80,6 @@ public class DefaultLaunchHandler implements LaunchHandler { } /** - * Print a message to stdout. - */ - protected static void printMessage(LaunchException ex) { - StringBuffer result = new StringBuffer(); - result.append("netx: "); - result.append(ex.getCategory()); - if (ex.getSummary() != null) { - result.append(": "); - result.append(ex.getSummary()); - } - - if (JNLPRuntime.isDebug()) { - if (ex.getCause() != null) - ex.getCause().printStackTrace(); - else - ex.printStackTrace(); - } - - Throwable causes[] = ex.getCauses(); - - for (int i = 0; i < causes.length; i++) { - result.append(" ("); - result.append(causes[i].getClass().getName()); - result.append(" "); - result.append(causes[i].getMessage()); - result.append(")"); - } - } - - /** * Do nothing on when initializing */ @Override diff --git a/netx/net/sourceforge/jnlp/GuiLaunchHandler.java b/netx/net/sourceforge/jnlp/GuiLaunchHandler.java index 371d302..7bb8bc1 100644 --- a/netx/net/sourceforge/jnlp/GuiLaunchHandler.java +++ b/netx/net/sourceforge/jnlp/GuiLaunchHandler.java @@ -37,6 +37,7 @@ exception statement from your version. */ package net.sourceforge.jnlp; +import java.io.PrintStream; import java.lang.reflect.InvocationTargetException; import java.net.URL; @@ -51,12 +52,16 @@ import net.sourceforge.jnlp.util.BasicExceptionDialog; * A {@link LaunchHandler} that gives feedback to the user using GUI elements * including splash screens and exception dialogs. */ -public class GuiLaunchHandler implements LaunchHandler { +public class GuiLaunchHandler extends AbstractLaunchHandler { private JNLPSplashScreen splashScreen = null; private final Object mutex = new Object(); private UpdatePolicy policy = UpdatePolicy.ALWAYS; + public GuiLaunchHandler(PrintStream outputStream) { + super(outputStream); + } + @Override public void launchCompleted(ApplicationInstance application) { // do nothing @@ -71,6 +76,7 @@ public class GuiLaunchHandler implements LaunchHandler { BasicExceptionDialog.show(exception); } }); + printMessage(exception); } private void closeSplashScreen() { @@ -141,14 +147,14 @@ public class GuiLaunchHandler implements LaunchHandler { @Override public boolean launchWarning(LaunchException warning) { - DefaultLaunchHandler.printMessage(warning); + printMessage(warning); return true; } @Override - public boolean validationError(LaunchException security) { + public boolean validationError(LaunchException error) { closeSplashScreen(); - DefaultLaunchHandler.printMessage(security); + printMessage(error); return true; } diff --git a/netx/net/sourceforge/jnlp/LaunchException.java b/netx/net/sourceforge/jnlp/LaunchException.java index 5257607..6c194ed 100644 --- a/netx/net/sourceforge/jnlp/LaunchException.java +++ b/netx/net/sourceforge/jnlp/LaunchException.java @@ -16,11 +16,6 @@ package net.sourceforge.jnlp; -import java.io.*; -import java.util.*; - -import net.sourceforge.jnlp.util.*; - /** * Thrown when a JNLP application, applet, or installer could not * be created. @@ -30,8 +25,7 @@ import net.sourceforge.jnlp.util.*; */ public class LaunchException extends Exception { - /** the original exception */ - private Throwable cause = null; + private static final long serialVersionUID = 7283827853612357423L; /** the file being launched */ private JNLPFile file; @@ -53,36 +47,27 @@ public class LaunchException extends Exception { */ public LaunchException(JNLPFile file, Exception cause, String severity, String category, String summary, String description) { super(severity + ": " + category + ": " + summary + " " - + (description == null ? "" : description)); + + (description == null ? "" : description), cause); this.file = file; this.category = category; this.summary = summary; this.description = description; this.severity = severity; - - // replace with setCause when no longer 1.3 compatible - this.cause = cause; } /** * Creates a LaunchException with a cause. */ public LaunchException(Throwable cause) { - this(cause.getMessage()); - - // replace with setCause when no longer 1.3 compatible - this.cause = cause; + super(cause); } /** * Creates a LaunchException with a cause and detail message */ public LaunchException(String message, Throwable cause) { - this(message + ": " + cause.getMessage()); - - // replace with setCause when no longer 1.3 compatible - this.cause = cause; + super(message, cause); } /** @@ -132,57 +117,4 @@ public class LaunchException extends Exception { return severity; } - /** - * Return the cause of the launch exception or null if there - * is no cause exception. - */ - public Throwable getCause() { - return cause; - } - - /** - * Returns the causes for this exception. This method is - * useful on JRE 1.3 since getCause is not a standard method, - * and will be removed once netx no longer supports 1.3. - */ - public Throwable[] getCauses() { - ArrayList<Throwable> result = new ArrayList<Throwable>(); - - Reflect r = new Reflect(); - Throwable cause = this.cause; - - while (cause != null) { - result.add(cause); - cause = (Throwable) r.invoke(cause, "getCause"); - } - - return result.toArray(new Throwable[0]); - } - - /** - * Print the stack trace and the cause exception (1.3 - * compatible) - */ - public void printStackTrace(PrintStream stream) { - super.printStackTrace(stream); - - if (cause != null) { - stream.println("Caused by: "); - cause.printStackTrace(stream); - } - } - - /** - * Print the stack trace and the cause exception (1.3 - * compatible) - */ - public void printStackTrace(PrintWriter stream) { - super.printStackTrace(stream); - - if (cause != null) { - stream.println("Caused by: "); - cause.printStackTrace(stream); - } - } - } diff --git a/netx/net/sourceforge/jnlp/LaunchHandler.java b/netx/net/sourceforge/jnlp/LaunchHandler.java index f12dcf6..7d6728c 100644 --- a/netx/net/sourceforge/jnlp/LaunchHandler.java +++ b/netx/net/sourceforge/jnlp/LaunchHandler.java @@ -50,7 +50,7 @@ public interface LaunchHandler { * * @return true to allow the application to continue, false to stop it. */ - public boolean validationError(LaunchException security); + public boolean validationError(LaunchException error); // this method will probably be replaced when real security // controller is in place. diff --git a/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java b/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java index ab97eb2..3e70fe1 100644 --- a/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java +++ b/netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java @@ -196,9 +196,9 @@ public class JNLPRuntime { if (handler == null) { if (headless) { - handler = new DefaultLaunchHandler(); + handler = new DefaultLaunchHandler(System.err); } else { - handler = new GuiLaunchHandler(); + handler = new GuiLaunchHandler(System.err); } } |