aboutsummaryrefslogtreecommitdiffstats
path: root/netx/net/sourceforge
diff options
context:
space:
mode:
authorOmair Majid <[email protected]>2012-03-14 11:27:16 -0400
committerOmair Majid <[email protected]>2012-03-14 11:27:16 -0400
commitbf89d620ace4a20270fee72285f9c4c9bfa6b345 (patch)
treebbeda7a0916ce754b66afaf0e98f1c2032722540 /netx/net/sourceforge
parent19038d58d1ee7981937a8de2014b9178d272e5cd (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.java84
-rw-r--r--netx/net/sourceforge/jnlp/DefaultLaunchHandler.java42
-rw-r--r--netx/net/sourceforge/jnlp/GuiLaunchHandler.java14
-rw-r--r--netx/net/sourceforge/jnlp/LaunchException.java76
-rw-r--r--netx/net/sourceforge/jnlp/LaunchHandler.java2
-rw-r--r--netx/net/sourceforge/jnlp/runtime/JNLPRuntime.java4
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);
}
}