Google Web Toolkit
Search Google Code:

# Exceptions and JSNI

Exceptions can originate both in Java code and in handwritten JavaScript code.

An exception that originates in a JSNI method and escapes into Java code can be caught as a JavaScriptException. Relying on this behavior is discouraged because JavaScript exceptions are not usefully typed. The recommended practice is to handle JavaScript exceptions in JavaScript code and Java exceptions in Java code.

When a JSNI method invokes a Java method, a more complex call chain results. An exception thrown from the inner Java method can safely pass through the sandwiched JSNI method back to the original Java call site, retaining type fidelity. It can be caught as expected. For example,

1. Java method `foo()` calls JSNI method `bar()`
2. JavaScript method `bar()` calls Java method `baz()`
3. Java method `baz()` throws an exception

The exception thrown out of `baz()` will propagate through `bar()` and can be caught in `foo()`.