Buggy code:
public class OChannelBinaryAsynchClient extends OChannelBinary { protected final int socketTimeout ; protected final short srvProtocolVersion ; private final Condition readCondition = getLockRead ( ) . getUnderlying ( ) . newCondition ( ) ; private final int maxUnreadResponses ; private String serverURL ; private volatile boolean channelRead = false ; private byte currentStatus ; private int currentSessionId ; private volatile OAsynchChannelServiceThread serviceThread ; public OChannelBinaryAsynchClient ( final String remoteHost , final int remotePort , final String iDatabaseName , final OContextConfiguration iConfig , final int iProtocolVersion ) throws IOException { } public OChannelBinaryAsynchClient ( final String remoteHost , final int remotePort , final String iDatabaseName , final OContextConfiguration iConfig , final int protocolVersion , final ORemoteServerEventListener asynchEventListener ) throws IOException { } @ SuppressWarnings ( "unchecked" ) private static RuntimeException createException ( final String iClassName , final String iMessage , final Exception iPrevious ) { } public void beginRequest ( ) { } public void endRequest ( ) throws IOException { } public byte [ ] beginResponse ( final int iRequesterId , boolean token ) throws IOException { } public byte [ ] beginResponse ( final int iRequesterId , final long iTimeout , boolean token ) throws IOException { } public void endResponse ( ) throws IOException { } @ Override public void close ( ) { } @ Override public void clearInput ( ) throws IOException { } public boolean isConnected ( ) { } public short getSrvProtocolVersion ( ) { } public String getServerURL ( ) { } public boolean tryLock ( ) { } public void unlock ( ) { } public OAsynchChannelServiceThread getServiceThread ( ) { } protected int handleStatus ( final byte iResult , final int iClientTxId ) throws IOException { } private void setReadResponseTimeout ( ) throws SocketException { } private void setWaitResponseTimeout ( ) throws SocketException { } private void throwSerializedException ( final byte [ ] serializedException ) throws IOException { final OMemoryInputStream inputStream = new OMemoryInputStream ( serializedException ) ; final ObjectInputStream objectInputStream = new ObjectInputStream ( inputStream ) ; Object throwable = null ; try { throwable = objectInputStream . readObject ( ) ; } catch ( ClassNotFoundException e ) { OLogManager . instance ( ) . error ( this , "Error<seq2seq4repair_space>during<seq2seq4repair_space>exception<seq2seq4repair_space>deserialization" , e ) ; <START_BUG> throw new IOException ( ( "Error<seq2seq4repair_space>during<seq2seq4repair_space>exception<seq2seq4repair_space>deserialization:<seq2seq4repair_space>" + ( e . toString ( ) ) ) ) ; <END_BUG> } objectInputStream . close ( ) ; if ( throwable instanceof OException ) throw ( ( OException ) ( throwable ) ) ; else if ( throwable instanceof Throwable ) throw new OResponseProcessingException ( "Exception<seq2seq4repair_space>during<seq2seq4repair_space>response<seq2seq4repair_space>processing." , ( ( Throwable ) ( throwable ) ) ) ; else OLogManager . instance ( ) . error ( this , ( "Error<seq2seq4repair_space>during<seq2seq4repair_space>exception<seq2seq4repair_space>serialization,<seq2seq4repair_space>serialized<seq2seq4repair_space>exception<seq2seq4repair_space>is<seq2seq4repair_space>not<seq2seq4repair_space>Throwable,<seq2seq4repair_space>exception<seq2seq4repair_space>type<seq2seq4repair_space>is<seq2seq4repair_space>" + ( throwable != null ? throwable . getClass ( ) . getName ( ) : "null" ) ) ) ; } }

Fix:
throw new OException ( ( "Error<seq2seq4repair_space>during<seq2seq4repair_space>exception<seq2seq4repair_space>deserialization:<seq2seq4repair_space>" + ( e . toString ( ) ) ) ) ;