protected void discardFields(final SerializableClassDescriptor descriptor) throws IOException { for (SerializableField serializableField : descriptor.getFields()) { try { switch (serializableField.getKind()) { TraceInformation.addFieldInformation(e, descriptor.getSerializableClass(), serializableField); throw e; } catch (ClassNotFoundException e) { TraceInformation.addFieldInformation(e, descriptor.getSerializableClass(), serializableField); throw new IOException("Failed to discard field data", e); } catch (RuntimeException e) { TraceInformation.addFieldInformation(e, descriptor.getSerializableClass(), serializableField); throw e;
public String toString() { final ClassDescriptor superClassDescriptor = getSuperClassDescriptor(); if (superClassDescriptor == null) { return String.format("%s for %s (id %x02)", getClass().getSimpleName(), getType(), Integer.valueOf(getTypeID())); } else { return String.format("%s for %s (id %x02) extends %s", getClass().getSimpleName(), getType(), Integer.valueOf(getTypeID()), superClassDescriptor); } }
public Class<?> getNonSerializableSuperclass(SerializabilityChecker checker) { Class<?> nearestType = getNearestType(); if (nearestType == null) return Object.class; while (checker.isSerializable(nearestType)) { nearestType = nearestType.getSuperclass(); } return nearestType; } }
public Class<?> getNearestType() { Class<?> type = getType(); return type == null ? getSuperClassDescriptor().getNearestType() : type; }
private void doInitSerializable(final Object obj, final SerializableClassDescriptor descriptor) throws IOException, ClassNotFoundException { final Class<?> type = descriptor.getType(); final SerializableClass info = registry.lookup(type); final ClassDescriptor superDescriptor = descriptor.getSuperClassDescriptor(); if (superDescriptor instanceof SerializableClassDescriptor) { final SerializableClassDescriptor serializableSuperDescriptor = (SerializableClassDescriptor) superDescriptor; doInitSerializable(obj, serializableSuperDescriptor); final int typeId = descriptor.getTypeID(); final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller(); if (descriptor.isGap()) { if (info.hasReadObjectNoData()) { info.callReadObjectNoData(obj);
final Class<?> nonSerializableSuperclass; if (descriptor instanceof SerializableClassDescriptor) { nonSerializableSuperclass = ((SerializableClassDescriptor) descriptor).getNonSerializableSuperclass(serializabilityChecker); } else { nonSerializableSuperclass = Object.class; case ID_SERIALIZABLE_CLASS: { final SerializableClassDescriptor serializableClassDescriptor = (SerializableClassDescriptor) descriptor; final SerializableClass serializableClass = serializableClassDescriptor.getSerializableClass(); final Object obj; if(serializableClass == null) { obj = null; } else if (!serializableClass.hasNoInitConstructor(serializableClassDescriptor.getNonSerializableSuperclass(serializabilityChecker))) { throw new NotSerializableException(serializableClass.getSubjectClass().getName()); } else { obj = serializableClass.callNonInitConstructor(serializableClassDescriptor.getNonSerializableSuperclass(serializabilityChecker));
public SerializableField[] getFields() { return check(result).getFields(); }
public SerializableClass getSerializableClass() { return check(result).getSerializableClass(); }
public ClassDescriptor getSuperClassDescriptor() { return check(result).getSuperClassDescriptor(); }
public Class<?> getNearestType() { Class<?> type = getType(); return type == null ? getSuperClassDescriptor().getNearestType() : type; }
final Class<?> nonSerializableSuperclass; if (descriptor instanceof SerializableClassDescriptor) { nonSerializableSuperclass = ((SerializableClassDescriptor) descriptor).getNonSerializableSuperclass(serializabilityChecker); } else { nonSerializableSuperclass = Object.class; case ID_SERIALIZABLE_CLASS: { final SerializableClassDescriptor serializableClassDescriptor = (SerializableClassDescriptor) descriptor; final SerializableClass serializableClass = serializableClassDescriptor.getSerializableClass(); final Object obj; if(serializableClass == null) { obj = null; } else if (!serializableClass.hasNoInitConstructor(serializableClassDescriptor.getNonSerializableSuperclass(serializabilityChecker))) { throw new NotSerializableException(serializableClass.getSubjectClass().getName()); } else { obj = serializableClass.callNonInitConstructor(serializableClassDescriptor.getNonSerializableSuperclass(serializabilityChecker));
public SerializableField[] getFields() { return check(result).getFields(); }
public SerializableClass getSerializableClass() { return check(result).getSerializableClass(); }
public ClassDescriptor getSuperClassDescriptor() { return check(result).getSuperClassDescriptor(); }
private void doInitSerializable(final Object obj, final SerializableClassDescriptor descriptor, final boolean discardMissing) throws IOException, ClassNotFoundException { final Class<?> type = descriptor.getType(); final ClassDescriptor superDescriptor = descriptor.getSuperClassDescriptor(); if (superDescriptor instanceof SerializableClassDescriptor) { final SerializableClassDescriptor serializableSuperDescriptor = (SerializableClassDescriptor) superDescriptor; doInitSerializable(obj, serializableSuperDescriptor, discardMissing); final int typeId = descriptor.getTypeID(); final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller(); if (type == null) {
throw new NotActiveException("readFields() may only be called when the fields have not yet been read"); final SerializableField[] streamFields = serializableClassDescriptor.getFields(); final int cnt = streamFields.length; final ReadField[] readFields = new ReadField[cnt]; TraceInformation.addFieldInformation(e, serializableClassDescriptor.getSerializableClass(), field); throw e; } catch (ClassNotFoundException e) { TraceInformation.addFieldInformation(e, serializableClassDescriptor.getSerializableClass(), field); throw e; } catch (RuntimeException e) { TraceInformation.addFieldInformation(e, serializableClassDescriptor.getSerializableClass(), field); throw e;
public Class<?> getNearestType() { Class<?> type = getType(); return type == null ? getSuperClassDescriptor().getNearestType() : type; }
final Class<?> nonSerializableSuperclass; if (descriptor instanceof SerializableClassDescriptor) { nonSerializableSuperclass = ((SerializableClassDescriptor) descriptor).getNonSerializableSuperclass(serializabilityChecker); } else { nonSerializableSuperclass = Object.class; case ID_SERIALIZABLE_CLASS: { final SerializableClassDescriptor serializableClassDescriptor = (SerializableClassDescriptor) descriptor; final SerializableClass serializableClass = serializableClassDescriptor.getSerializableClass(); final Object obj; if(serializableClass == null) { obj = null; } else if (!serializableClass.hasNoInitConstructor(serializableClassDescriptor.getNonSerializableSuperclass(serializabilityChecker))) { throw new NotSerializableException(serializableClass.getSubjectClass().getName()); } else { obj = serializableClass.callNonInitConstructor(serializableClassDescriptor.getNonSerializableSuperclass(serializabilityChecker));
protected void finish(final State restoreState) throws IOException { switch (state.getAndSet(restoreState)) { case OFF: // ?? break; case ON: // todo if blockmode, flush... break; case UNREAD_FIELDS: if(serializableClassDescriptor.getFields().length > 0) { throw new NotActiveException("Fields were never read"); } } }
public SerializableClass getSerializableClass() { return check(result).getSerializableClass(); }