diff options
-rw-r--r-- | cpp/src/slice2java/Gen.cpp | 6 | ||||
-rw-r--r-- | java/src/Ice/src/main/java/IceInternal/Incoming.java | 5 | ||||
-rw-r--r-- | java/src/Ice/src/main/java/IceInternal/IncomingAsync.java | 23 |
3 files changed, 33 insertions, 1 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp index e0e4df2aba7..35c8b12aa42 100644 --- a/cpp/src/slice2java/Gen.cpp +++ b/cpp/src/slice2java/Gen.cpp @@ -1525,7 +1525,7 @@ Slice::JavaVisitor::writeDispatchAndMarshalling(Output& out, const ClassDefPtr& // Call on the servant. // string classNameAMD = "AMD_" + p->name(); - out << nl << classNameAMD << '_' << opName << " __cb = new _" << classNameAMD << '_' << opName + out << nl << '_' << classNameAMD << '_' << opName << " __cb = new _" << classNameAMD << '_' << opName << "(__inS);"; out << nl << "try"; out << sb; @@ -1550,6 +1550,10 @@ Slice::JavaVisitor::writeDispatchAndMarshalling(Output& out, const ClassDefPtr& out << sb; out << nl << "__cb.ice_exception(ex);"; out << eb; + out << nl << "catch(java.lang.Error ex)"; + out << sb; + out << nl << "__cb.__error(ex);"; + out << eb; out << nl << "return Ice.DispatchStatus.DispatchAsync;"; out << eb; diff --git a/java/src/Ice/src/main/java/IceInternal/Incoming.java b/java/src/Ice/src/main/java/IceInternal/Incoming.java index 6f1f205854f..d03365b785c 100644 --- a/java/src/Ice/src/main/java/IceInternal/Incoming.java +++ b/java/src/Ice/src/main/java/IceInternal/Incoming.java @@ -268,6 +268,11 @@ final public class Incoming extends IncomingBase implements Ice.Request } catch(java.lang.Error ex) { + if(_responseHandler == null) + { + throw ex; + } + if(_servant != null && _locator != null && !__servantLocatorFinished(false)) { return; diff --git a/java/src/Ice/src/main/java/IceInternal/IncomingAsync.java b/java/src/Ice/src/main/java/IceInternal/IncomingAsync.java index 7abed77651d..7f953872e5a 100644 --- a/java/src/Ice/src/main/java/IceInternal/IncomingAsync.java +++ b/java/src/Ice/src/main/java/IceInternal/IncomingAsync.java @@ -139,6 +139,29 @@ public class IncomingAsync extends IncomingBase implements Ice.AMDCallback } } + final public void + __error(java.lang.Error exc) + { + if(_responseHandler == null) + { + throw exc; + } + + try + { + if(_locator != null && !__servantLocatorFinished(true)) + { + return; + } + + __handleError(exc, true); + } + catch(Ice.LocalException ex) + { + _responseHandler.invokeException(_current.requestId, ex, 1, true); + } + } + final protected void __exception(java.lang.Exception exc) { |