summaryrefslogtreecommitdiff
path: root/cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp')
-rw-r--r--cpp/src/slice2java/Gen.cpp29
1 files changed, 18 insertions, 11 deletions
diff --git a/cpp/src/slice2java/Gen.cpp b/cpp/src/slice2java/Gen.cpp
index 338893b28a4..025b0a1a3c6 100644
--- a/cpp/src/slice2java/Gen.cpp
+++ b/cpp/src/slice2java/Gen.cpp
@@ -3896,19 +3896,26 @@ Slice::Gen::DelegateMVisitor::visitClassDefStart(const ClassDefPtr& p)
out << sb;
if(!inParams.empty())
{
+ out << nl << "try";
+ out << sb;
out << nl << "IceInternal.BasicStream __os = __out.os();";
- }
- iter = 0;
- for(pli = inParams.begin(); pli != inParams.end(); ++pli)
- {
- writeMarshalUnmarshalCode(out, package, (*pli)->type(), fixKwd((*pli)->name()), true, iter, false,
- (*pli)->getMetaData());
- }
- if(op->sendsClasses())
- {
- out << nl << "__os.writePendingObjects();";
+ iter = 0;
+ for(pli = inParams.begin(); pli != inParams.end(); ++pli)
+ {
+ writeMarshalUnmarshalCode(out, package, (*pli)->type(), fixKwd((*pli)->name()), true, iter, false,
+ (*pli)->getMetaData());
+ }
+ if(op->sendsClasses())
+ {
+ out << nl << "__os.writePendingObjects();";
+ }
+ out << eb;
+ out << nl << "catch(Ice.LocalException __ex)";
+ out << sb;
+ out << nl << "__out.abort(__ex);";
+ out << eb;
}
- out << nl << "boolean __ok = __out.invoke();";
+ out << nl << "boolean __ok = __out.invoke();";
out << nl << "try";
out << sb;
out << nl << "IceInternal.BasicStream __is = __out.is();";