public void writeClass(final Marshaller marshaller, final Class<?> clazz) throws IOException { marshaller.writeByte(idx); classTable.getClassWriter(clazz).writeClass(marshaller, clazz); } }));
/** {@inheritDoc} */ public Class<?> readClass(final Unmarshaller unmarshaller) throws IOException, ClassNotFoundException { final int v = unmarshaller.readByte() & 0xff; final ClassTable table = readers[v]; if (table == null) { throw new StreamCorruptedException(String.format("Unknown class table ID %02x encountered", Integer.valueOf(v))); } return table.readClass(unmarshaller); } }
/** {@inheritDoc} */ public Writer getClassWriter(final Class<?> clazz) throws IOException { for (Pair<ClassTable, Writer> entry : writers) { final ClassTable table = entry.getA(); final Writer writer = entry.getB(); if (table.getClassWriter(clazz) != null) { return writer; } } return null; }
final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_ENUM_TYPE_CLASS); classCache.set(idx, descriptor); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_EXTERNALIZABLE_CLASS); classCache.set(idx, descriptor); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final Externalizer externalizer = (Externalizer) readObject(); final SimpleClassDescriptor descriptor = new ExternalizerClassDescriptor(type, externalizer); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_PLAIN_CLASS); classCache.set(idx, descriptor); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_PROXY_CLASS); classCache.set(idx, descriptor);
protected void writeNewClass(final Class<?> objClass) throws IOException { if (objClass.isEnum()) { writeNewEnumClass(objClass.asSubclass(Enum.class)); } else if (Proxy.class.isAssignableFrom(objClass)) { writeNewProxyClass(objClass); } else if (objClass.isArray()) { writeObjectArrayClass(objClass); } else if (! objClass.isInterface() && serializabilityChecker.isSerializable(objClass)) { if (Externalizable.class.isAssignableFrom(objClass)) { writeNewExternalizableClass(objClass); } else { writeNewSerializableClass(objClass); } } else { ClassTable.Writer classTableWriter = classTable.getClassWriter(objClass); if (classTableWriter != null) { write(ID_PREDEFINED_PLAIN_CLASS); classCache.put(objClass, classSeq++); writeClassTableData(objClass, classTableWriter); } else { write(ID_PLAIN_CLASS); writeString(classResolver.getClassName(objClass)); classResolver.annotateClass(this, objClass); classCache.put(objClass, classSeq++); } } }
/** {@inheritDoc} */ public Class<?> readClass(final Unmarshaller unmarshaller) throws IOException, ClassNotFoundException { final int v = unmarshaller.readByte() & 0xff; final ClassTable table = readers[v]; if (table == null) { throw new StreamCorruptedException(String.format("Unknown class table ID %02x encountered", Integer.valueOf(v))); } return table.readClass(unmarshaller); } }
protected void writeNewEnumClass(final Class<? extends Enum> objClass) throws IOException { ClassTable.Writer classTableWriter = classTable.getClassWriter(objClass); if (classTableWriter != null) { write(ID_PREDEFINED_ENUM_TYPE_CLASS); classCache.put(objClass, classSeq++); writeClassTableData(objClass, classTableWriter); } else { write(ID_ENUM_TYPE_CLASS); writeString(classResolver.getClassName(objClass)); classCache.put(objClass, classSeq++); classResolver.annotateClass(this, objClass); } }
/** {@inheritDoc} */ public Class<?> readClass(final Unmarshaller unmarshaller) throws IOException, ClassNotFoundException { final int v = unmarshaller.readByte() & 0xff; final ClassTable table = readers[v]; if (table == null) { throw new StreamCorruptedException(String.format("Unknown class table ID %02x encountered", Integer.valueOf(v))); } return table.readClass(unmarshaller); } }
protected void writeNewExternalizerClass(final Class<?> objClass, final Externalizer externalizer) throws IOException { ClassTable.Writer classTableWriter = classTable.getClassWriter(objClass); if (classTableWriter != null) { write(ID_PREDEFINED_EXTERNALIZER_CLASS); classCache.put(objClass, classSeq++); writeClassTableData(objClass, classTableWriter); } else { write(ID_EXTERNALIZER_CLASS); writeString(classResolver.getClassName(objClass)); classCache.put(objClass, classSeq++); classResolver.annotateClass(this, objClass); } writeObject(externalizer); }
/** {@inheritDoc} */ public Class<?> readClass(final Unmarshaller unmarshaller) throws IOException, ClassNotFoundException { final int v = unmarshaller.readByte() & 0xff; final ClassTable table = readers[v]; if (table == null) { throw new StreamCorruptedException(String.format("Unknown class table ID %02x encountered", Integer.valueOf(v))); } return table.readClass(unmarshaller); } }
protected void writeNewExternalizableClass(final Class<?> objClass) throws IOException { ClassTable.Writer classTableWriter = classTable.getClassWriter(objClass); if (classTableWriter != null) { write(ID_PREDEFINED_EXTERNALIZABLE_CLASS); classCache.put(objClass, classSeq++); writeClassTableData(objClass, classTableWriter); } else { write(ID_EXTERNALIZABLE_CLASS); writeString(classResolver.getClassName(objClass)); writeLong(registry.lookup(objClass).getEffectiveSerialVersionUID()); classCache.put(objClass, classSeq++); classResolver.annotateClass(this, objClass); } }
/** {@inheritDoc} */ public Class<?> readClass(final Unmarshaller unmarshaller) throws IOException, ClassNotFoundException { final int v = unmarshaller.readByte() & 0xff; final ClassTable table = readers[v]; if (table == null) { throw new StreamCorruptedException(String.format("Unknown class table ID %02x encountered", Integer.valueOf(v))); } return table.readClass(unmarshaller); } }
protected void writeNewProxyClass(final Class<?> objClass) throws IOException { ClassTable.Writer classTableWriter = classTable.getClassWriter(objClass); if (classTableWriter != null) { write(ID_PREDEFINED_PROXY_CLASS); classCache.put(objClass, classSeq++); writeClassTableData(objClass, classTableWriter); } else { write(ID_PROXY_CLASS); final String[] names = classResolver.getProxyInterfaces(objClass); writeInt(names.length); for (String name : names) { writeString(name); } classCache.put(objClass, classSeq++); if (configuredVersion == 1) { final BlockMarshaller blockMarshaller = getBlockMarshaller(); classResolver.annotateProxyClass(blockMarshaller, objClass); writeEndBlock(); } else { classResolver.annotateProxyClass(this, objClass); } } }
/** {@inheritDoc} */ public Class<?> readClass(final Unmarshaller unmarshaller) throws IOException, ClassNotFoundException { final int v = unmarshaller.readByte() & 0xff; final ClassTable table = readers[v]; if (table == null) { throw new StreamCorruptedException(String.format("Unknown class table ID %02x encountered", Integer.valueOf(v))); } return table.readClass(unmarshaller); } }
protected void writeNewSerializableClass(final Class<?> objClass) throws IOException { ClassTable.Writer classTableWriter = classTable.getClassWriter(objClass); if (classTableWriter != null) { write(ID_PREDEFINED_SERIALIZABLE_CLASS);
private Class<?> readClassTableClass() throws IOException, ClassNotFoundException { if (version == 1) { final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller(); final Class<?> type = classTable.readClass(blockUnmarshaller); blockUnmarshaller.readToEndBlockData(); blockUnmarshaller.unblock(); return type; } else { // v2 does not require a block for this return classTable.readClass(this); } }
/** {@inheritDoc} */ public Writer getClassWriter(final Class<?> clazz) throws IOException { for (Pair<ClassTable, Writer> entry : writers) { final ClassTable table = entry.getA(); final Writer writer = entry.getB(); if (table.getClassWriter(clazz) != null) { return writer; } } return null; }
final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_ENUM_TYPE_CLASS); classCache.set(idx, descriptor); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_EXTERNALIZABLE_CLASS); classCache.set(idx, descriptor); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final Externalizer externalizer = (Externalizer) readObject(); final SimpleClassDescriptor descriptor = new ExternalizerClassDescriptor(type, externalizer); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_PLAIN_CLASS); classCache.set(idx, descriptor); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_PROXY_CLASS); classCache.set(idx, descriptor);
public void writeClass(final Marshaller marshaller, final Class<?> clazz) throws IOException { marshaller.writeByte(idx); classTable.getClassWriter(clazz).writeClass(marshaller, clazz); } }));
final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_ENUM_TYPE_CLASS); classCache.set(idx, descriptor); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_EXTERNALIZABLE_CLASS); classCache.set(idx, descriptor); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final Externalizer externalizer = (Externalizer) readObject(); final SimpleClassDescriptor descriptor = new ExternalizerClassDescriptor(type, externalizer); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_PLAIN_CLASS); classCache.set(idx, descriptor); final int idx = classCache.size(); classCache.add(null); final Class<?> type = classTable.readClass(this); final SimpleClassDescriptor descriptor = new SimpleClassDescriptor(type, ID_PROXY_CLASS); classCache.set(idx, descriptor);