diff options
author | Mark Spruiell <mes@zeroc.com> | 2003-01-25 17:06:53 +0000 |
---|---|---|
committer | Mark Spruiell <mes@zeroc.com> | 2003-01-25 17:06:53 +0000 |
commit | 4aa5ae4bd02c6319adc1e09d9988c3156efd5606 (patch) | |
tree | f4e8c09fbe577c6219b01e966f26092fab3cbe9d /cpp/src | |
parent | raise NonRepeatable when exception occurs during reply unmarshalling (diff) | |
download | ice-4aa5ae4bd02c6319adc1e09d9988c3156efd5606.tar.bz2 ice-4aa5ae4bd02c6319adc1e09d9988c3156efd5606.tar.xz ice-4aa5ae4bd02c6319adc1e09d9988c3156efd5606.zip |
trap LocalException during reply unmarshalling
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/Ice/Proxy.cpp | 49 |
1 files changed, 42 insertions, 7 deletions
diff --git a/cpp/src/Ice/Proxy.cpp b/cpp/src/Ice/Proxy.cpp index c7452e43341..cfc8aee2ed7 100644 --- a/cpp/src/Ice/Proxy.cpp +++ b/cpp/src/Ice/Proxy.cpp @@ -792,7 +792,14 @@ IceDelegateM::Ice::Object::ice_isA(const string& __id, const Context& __context) throw ::Ice::UnknownUserException(__FILE__, __LINE__); } bool __ret; - __is->read(__ret); + try + { + __is->read(__ret); + } + catch(const ::Ice::LocalException& __ex) + { + throw ::IceInternal::NonRepeatable(__ex); + } return __ret; } @@ -818,7 +825,14 @@ IceDelegateM::Ice::Object::ice_ids(const Context& __context) throw ::Ice::UnknownUserException(__FILE__, __LINE__); } vector<string> __ret; - __is->read(__ret); + try + { + __is->read(__ret); + } + catch(const ::Ice::LocalException& __ex) + { + throw ::IceInternal::NonRepeatable(__ex); + } return __ret; } @@ -833,7 +847,14 @@ IceDelegateM::Ice::Object::ice_id(const Context& __context) throw ::Ice::UnknownUserException(__FILE__, __LINE__); } string __ret; - __is->read(__ret); + try + { + __is->read(__ret); + } + catch(const ::Ice::LocalException& __ex) + { + throw ::IceInternal::NonRepeatable(__ex); + } return __ret; } @@ -848,7 +869,14 @@ IceDelegateM::Ice::Object::ice_facets(const Context& __context) throw ::Ice::UnknownUserException(__FILE__, __LINE__); } FacetPath __ret; - __is->read(__ret); + try + { + __is->read(__ret); + } + catch(const ::Ice::LocalException& __ex) + { + throw ::IceInternal::NonRepeatable(__ex); + } return __ret; } @@ -865,9 +893,16 @@ IceDelegateM::Ice::Object::ice_invoke(const string& operation, bool ok = __out.invoke(); if(__reference->mode == Reference::ModeTwoway) { - BasicStream* __is = __out.is(); - Int sz = __is->getReadEncapsSize(); - __is->readBlob(outParams, sz); + try + { + BasicStream* __is = __out.is(); + Int sz = __is->getReadEncapsSize(); + __is->readBlob(outParams, sz); + } + catch(const ::Ice::LocalException& __ex) + { + throw ::IceInternal::NonRepeatable(__ex); + } } return ok; } |