summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cpp/src/slice2java/Gen.cpp6
-rw-r--r--java/src/Ice/src/main/java/IceInternal/Incoming.java5
-rw-r--r--java/src/Ice/src/main/java/IceInternal/IncomingAsync.java23
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)
{