diff options
Diffstat (limited to 'java/src/IceInternal/IncomingBase.java')
-rw-r--r-- | java/src/IceInternal/IncomingBase.java | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/java/src/IceInternal/IncomingBase.java b/java/src/IceInternal/IncomingBase.java index 2a2c5a29145..c093284e35e 100644 --- a/java/src/IceInternal/IncomingBase.java +++ b/java/src/IceInternal/IncomingBase.java @@ -153,6 +153,42 @@ public class IncomingBase _os.instance().initializationData().logger.warning(sw.toString()); } + final protected boolean + __servantLocatorFinished() + { + assert(_locator != null && _servant != null); + try + { + _locator.finished(_current, _servant, _cookie.value); + return true; + } + catch(Ice.UserException ex) + { + // + // The operation may have already marshaled a reply; we must overwrite that reply. + // + if(_response) + { + _os.endWriteEncaps(); + _os.resize(Protocol.headerSize + 4, false); // Reply status position. + _os.writeByte(ReplyStatus.replyUserException); + _os.startWriteEncaps(); + _os.writeUserException(ex); + _os.endWriteEncaps(); + _connection.sendResponse(_os, _compress); + } + else + { + _connection.sendNoResponse(); + } + } + catch(java.lang.Exception ex) + { + __handleException(ex); + } + return false; + } + final protected void __handleException(java.lang.Exception exc) { |