@Override public Object readObject(Unmarshaller input) throws IOException, ClassNotFoundException { int readerIndex = input.readUnsignedByte(); int foreignId = -1; if (readerIndex == Ids.MAX_ID) { // User defined externalizer foreignId = UnsignedNumeric.readUnsignedInt(input); readerIndex = generateForeignReaderIndex(foreignId); } ExternalizerAdapter adapter = readers.get(readerIndex); if (adapter == null) { if (!started) { log.tracef( "Either the marshaller has stopped or hasn't started. Read externalizers are not properly populated: %s", readers); if (Thread.currentThread().isInterrupted()) { throw log.pushReadInterruptionDueToCacheManagerShutdown( readerIndex, new InterruptedException()); } else { throw log.cannotResolveExternalizerReader(gcr.getStatus(), readerIndex); } } else { if (log.isTraceEnabled()) { log.tracef("Unknown type. Input stream has %s to read", input.available()); log.tracef("Check contents of read externalizers: %s", readers); } if (foreignId > 0) throw log.missingForeignExternalizer(foreignId); throw log.unknownExternalizerReaderIndex(readerIndex); } } return adapter.readObject(input); }