Skip to content
Snippets Groups Projects
Commit 21f2af70 authored by Tomasz Grabiec's avatar Tomasz Grabiec
Browse files

java: make ContextIsolator throw exceptions when arguments are invalid

Currently the error is just printed on the console. Throwing exception
allows API user to react on this situation in the most appropriate
way. For example if new application is started using a web interface
printing on console is useless.
parent c0e2c6e3
No related branches found
No related tags found
No related merge requests found
...@@ -87,9 +87,6 @@ public class ContextIsolator { ...@@ -87,9 +87,6 @@ public class ContextIsolator {
public void runSync(String[] args) throws Throwable { public void runSync(String[] args) throws Throwable {
Context context = run(args); Context context = run(args);
if (context == null) {
return;
}
while (true) { while (true) {
try { try {
...@@ -106,14 +103,12 @@ public class ContextIsolator { ...@@ -106,14 +103,12 @@ public class ContextIsolator {
for (int i = 0; i < args.length; i++) { for (int i = 0; i < args.length; i++) {
if (args[i].equals("-jar")) { if (args[i].equals("-jar")) {
if (i + 1 >= args.length) { if (i + 1 >= args.length) {
System.err.println("RunJava: Missing jar name after '-jar'."); throw new IllegalArgumentException("Missing jar name after '-jar'.");
return null;
} }
return runJar(args[i + 1], java.util.Arrays.copyOfRange(args, i + 2, args.length), classpath); return runJar(args[i + 1], java.util.Arrays.copyOfRange(args, i + 2, args.length), classpath);
} else if (args[i].equals("-classpath") || args[i].equals("-cp")) { } else if (args[i].equals("-classpath") || args[i].equals("-cp")) {
if (i + 1 >= args.length) { if (i + 1 >= args.length) {
System.err.println("RunJava: Missing parameter after '" + args[i] + "'"); throw new IllegalArgumentException("Missing parameter after '" + args[i] + "'");
return null;
} }
for (String c : expandClassPath(args[i + 1])) { for (String c : expandClassPath(args[i + 1])) {
classpath.add(c); classpath.add(c);
...@@ -122,8 +117,7 @@ public class ContextIsolator { ...@@ -122,8 +117,7 @@ public class ContextIsolator {
} else if (args[i].startsWith("-D")) { } else if (args[i].startsWith("-D")) {
int eq = args[i].indexOf('='); int eq = args[i].indexOf('=');
if (eq < 0) { if (eq < 0) {
System.err.println("RunJava: Missing '=' in parameter '" + args[i] + "'"); throw new IllegalArgumentException("Missing '=' in parameter '" + args[i] + "'");
return null;
} }
String key = args[i].substring(2, eq); String key = args[i].substring(2, eq);
String value = args[i].substring(eq + 1, args[i].length()); String value = args[i].substring(eq + 1, args[i].length());
...@@ -131,20 +125,17 @@ public class ContextIsolator { ...@@ -131,20 +125,17 @@ public class ContextIsolator {
} else if (args[i].equals("-Xclassloader")) { } else if (args[i].equals("-Xclassloader")) {
// Non-standard try - use a different class loader. // Non-standard try - use a different class loader.
if (i + 1 >= args.length) { if (i + 1 >= args.length) {
System.err.println("RunJava: Missing parameter after '" + args[i] + "'"); throw new IllegalArgumentException("Missing parameter after '" + args[i] + "'");
return null;
} }
Xclassloader = args[i + 1]; Xclassloader = args[i + 1];
i++; i++;
} else if (!args[i].startsWith("-")) { } else if (!args[i].startsWith("-")) {
return runClass(args[i], java.util.Arrays.copyOfRange(args, i + 1, args.length), classpath); return runClass(args[i], java.util.Arrays.copyOfRange(args, i + 1, args.length), classpath);
} else { } else {
System.err.println("RunJava: Unknown parameter '" + args[i] + "'"); throw new IllegalArgumentException("Unknown parameter '" + args[i] + "'");
return null;
} }
} }
System.err.println("RunJava: No jar or class specified to run."); throw new IllegalArgumentException("No jar or class specified to run.");
return null;
} }
private Context runJar(String jarname, String[] args, ArrayList<String> classpath) throws Throwable { private Context runJar(String jarname, String[] args, ArrayList<String> classpath) throws Throwable {
...@@ -155,19 +146,15 @@ public class ContextIsolator { ...@@ -155,19 +146,15 @@ public class ContextIsolator {
jar.close(); jar.close();
String mainClass = mf.getMainAttributes().getValue("Main-Class"); String mainClass = mf.getMainAttributes().getValue("Main-Class");
if (mainClass == null) { if (mainClass == null) {
System.err.println( throw new IllegalArgumentException("No 'Main-Class' attribute in manifest of " + jarname);
"RunJava: No 'Main-Class' attribute in manifest of " +
jarname);
return null;
} }
classpath.add(jarname); classpath.add(jarname);
return runClass(mainClass, args, classpath); return runClass(mainClass, args, classpath);
} catch (FileNotFoundException e) { } catch (FileNotFoundException e) {
System.err.println("RunJava: File not found: " + jarname); throw new IllegalArgumentException("File not found: " + jarname);
} catch (ZipException e) { } catch (ZipException e) {
System.err.println("RunJava: File is not a jar: " + jarname); throw new IllegalArgumentException("File is not a jar: " + jarname);
} }
return null;
} }
private Context runClass(final String mainClass, final String[] args, final Iterable<String> classpath) throws Throwable { private Context runClass(final String mainClass, final String[] args, final Iterable<String> classpath) throws Throwable {
......
...@@ -24,6 +24,8 @@ public class RunJava { ...@@ -24,6 +24,8 @@ public class RunJava {
try { try {
ContextIsolator.getInstance().runSync(args); ContextIsolator.getInstance().runSync(args);
} catch (IllegalArgumentException ex) {
System.err.println("RunJava: " + ex.getMessage());
} catch (Throwable ex) { } catch (Throwable ex) {
ex.printStackTrace(); ex.printStackTrace();
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment