public void close() throws IOException { finish(); }
/** {@inheritDoc} */ public Unmarshaller createUnmarshaller(final MarshallingConfiguration configuration) throws IOException { return new RiverUnmarshaller(this, registry, configuration); }
public void registerValidation(final ObjectInputValidation obj, final int prio) throws NotActiveException, InvalidObjectException { unmarshaller.addValidation(obj, prio); }
private Object doReadArray(final int cnt, final boolean unshared, final boolean discardMissing) throws ClassNotFoundException, IOException { final int leadByte = readUnsignedByte(); switch (leadByte) { case ID_PRIM_BOOLEAN: { return doReadBooleanArray(cnt, unshared); return doReadByteArray(cnt, unshared); return doReadCharArray(cnt, unshared); return doReadDoubleArray(cnt, unshared); return doReadFloatArray(cnt, unshared); return doReadIntArray(cnt, unshared); return doReadLongArray(cnt, unshared); return doReadShortArray(cnt, unshared); return doReadObjectArray(cnt, doReadClassDescriptor(leadByte, true).getType(), unshared, discardMissing);
final int index = readInt(); try { final Object obj = instanceCache.get(index); final int index = readByte() | 0xffffff00; try { final Object obj = instanceCache.get(index + instanceCache.size()); final int index = readShort() | 0xffff0000; try { final Object obj = instanceCache.get(index + instanceCache.size()); case ID_NEW_OBJECT_UNSHARED: { if (unshared != (leadByte == ID_NEW_OBJECT_UNSHARED)) { throw sharedMismatch(); return replace(doReadNewObject(readUnsignedByte(), unshared, discardMissing)); int length = readUnsignedByte(); final String s = UTFUtils.readUTFBytes(this, length == 0 ? 0x100 : length); instanceCache.add(s); int length = readUnsignedShort(); final String s = UTFUtils.readUTFBytes(this, length == 0 ? 0x10000 : length); instanceCache.add(s); int length = readInt(); if (length <= 0) { throw new StreamCorruptedException("Invalid length value for string in stream (" + length + ")");
protected Object doReadNewObject(final int streamClassType, final boolean unshared, final boolean discardMissing) throws ClassNotFoundException, IOException { final ClassDescriptor descriptor = doReadClassDescriptor(streamClassType, ! discardMissing); try { final int classType = descriptor.getTypeID(); unsafe.putObject(obj, proxyInvocationHandlerOffset, InvocationHandler.class.cast(doReadNestedObject(unshared, "[proxy invocation handler]"))); final Object resolvedObject = objectResolver.readResolve(obj); if (unshared) { doInitSerializable(obj, serializableClassDescriptor, discardMissing); final Object resolvedObject = obj == null ? null : objectResolver.readResolve(serializableClass.hasReadResolve() ? serializableClass.callReadResolve(obj) : obj); if (unshared) { final Class<?> type = descriptor.getType(); final SerializableClass serializableClass = registry.lookup(type); final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller(); final Externalizable obj; if (serializableClass.hasObjectInputConstructor()) { final SerializableClass serializableClass = registry.lookup(type); final Object obj; final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller(); obj = externalizer.createExternal(type, blockUnmarshaller); instanceCache.set(idx, obj); final String name = readString(); final Enum obj = resolveEnumConstant(descriptor, name); final int idx = instanceCache.size(); instanceCache.add(obj);
if (superDescriptor instanceof SerializableClassDescriptor) { final SerializableClassDescriptor serializableSuperDescriptor = (SerializableClassDescriptor) superDescriptor; doInitSerializable(obj, serializableSuperDescriptor, discardMissing); final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller(); if (type == null) { if (descriptor instanceof SerializableGapClassDescriptor) { discardFields(descriptor); if (typeId == ID_WRITE_OBJECT_CLASS) { blockUnmarshaller.readToEndBlockData(); final RiverObjectInputStream objectInputStream = getObjectInputStream(); final SerializableClassDescriptor oldDescriptor = objectInputStream.swapClass(descriptor); final Object oldObj = objectInputStream.swapCurrent(obj); readFields(obj, descriptor, discardMissing); } else { discardFields(descriptor);
public void clearClassCache() throws IOException { clearInstanceCache(); classCache.clear(); }
private RiverObjectInputStream getObjectInputStream() throws IOException { final RiverObjectInputStream objectInputStream = this.objectInputStream; return objectInputStream == null ? this.objectInputStream = createObjectInputStream() : objectInputStream; }
public int available() throws IOException { return Math.min(remaining, riverUnmarshaller.available()); }
protected Object doReadNewObject(final int streamClassType, final boolean unshared) throws ClassNotFoundException, IOException { final ClassDescriptor descriptor = doReadClassDescriptor(streamClassType); try { final int classType = descriptor.getTypeID(); case ID_PROXY_CLASS: { final Class<?> type = descriptor.getType(); final Object obj = createProxyInstance(serializedCreator, type); final int idx = instanceCache.size(); instanceCache.add(obj); try { proxyInvocationHandler.set(obj, doReadNestedObject(unshared, "[proxy invocation handler]")); } catch (IllegalAccessException e) { throw new InvalidClassException(type.getName(), "Unable to set proxy invocation handler"); final int idx = instanceCache.size(); instanceCache.add(obj); doInitSerializable(obj, serializableClassDescriptor); final Object resolvedObject = objectResolver.readResolve(serializableClass.hasReadResolve() ? serializableClass.callReadResolve(obj) : obj); if (unshared) { final int idx = instanceCache.size(); instanceCache.add(obj); final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller(); obj.readExternal(blockUnmarshaller); blockUnmarshaller.readToEndBlockData(); final SerializableClass serializableClass = registry.lookup(type); final Object obj; final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller();
final int index = readInt(); try { final Object obj = instanceCache.get(index); final int index = readByte() | 0xffffff00; try { final Object obj = instanceCache.get(index + instanceCache.size()); final int index = readShort() | 0xffff0000; try { final Object obj = instanceCache.get(index + instanceCache.size()); case ID_NEW_OBJECT_UNSHARED: { if (unshared != (leadByte == ID_NEW_OBJECT_UNSHARED)) { throw sharedMismatch(); return replace(doReadNewObject(readUnsignedByte(), unshared, discardMissing)); int length = readUnsignedByte(); final String s = UTFUtils.readUTFBytes(this, length == 0 ? 0x100 : length); instanceCache.add(s); int length = readUnsignedShort(); final String s = UTFUtils.readUTFBytes(this, length == 0 ? 0x10000 : length); instanceCache.add(s); int length = readInt(); if (length <= 0) { throw new StreamCorruptedException("Invalid length value for string in stream (" + length + ")");
private Object doReadArray(final int cnt, final boolean unshared, final boolean discardMissing) throws ClassNotFoundException, IOException { final int leadByte = readUnsignedByte(); switch (leadByte) { case ID_PRIM_BOOLEAN: { return doReadBooleanArray(cnt, unshared); return doReadByteArray(cnt, unshared); return doReadCharArray(cnt, unshared); return doReadDoubleArray(cnt, unshared); return doReadFloatArray(cnt, unshared); return doReadIntArray(cnt, unshared); return doReadLongArray(cnt, unshared); return doReadShortArray(cnt, unshared); return doReadObjectArray(cnt, doReadClassDescriptor(leadByte, true).getType(), unshared, discardMissing);
if (superDescriptor instanceof SerializableClassDescriptor) { final SerializableClassDescriptor serializableSuperDescriptor = (SerializableClassDescriptor) superDescriptor; doInitSerializable(obj, serializableSuperDescriptor, discardMissing); final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller(); if (type == null) { if (descriptor instanceof SerializableGapClassDescriptor) { discardFields(descriptor); if (typeId == ID_WRITE_OBJECT_CLASS) { blockUnmarshaller.readToEndBlockData(); final RiverObjectInputStream objectInputStream = getObjectInputStream(); final SerializableClassDescriptor oldDescriptor = objectInputStream.swapClass(descriptor); final Object oldObj = objectInputStream.swapCurrent(obj); readFields(obj, descriptor, discardMissing); } else { discardFields(descriptor);
public void clearClassCache() throws IOException { clearInstanceCache(); classCache.clear(); }
private RiverObjectInputStream getObjectInputStream() throws IOException { final RiverObjectInputStream objectInputStream = this.objectInputStream; return objectInputStream == null ? this.objectInputStream = createObjectInputStream() : objectInputStream; }
public int available() throws IOException { return Math.min(remaining, riverUnmarshaller.available()); }
protected Object doReadNewObject(final int streamClassType, final boolean unshared, final boolean discardMissing) throws ClassNotFoundException, IOException { final ClassDescriptor descriptor = doReadClassDescriptor(streamClassType, ! discardMissing); try { final int classType = descriptor.getTypeID(); unsafe.putObject(obj, proxyInvocationHandlerOffset, InvocationHandler.class.cast(doReadNestedObject(unshared, "[proxy invocation handler]"))); final Object resolvedObject = objectResolver.readResolve(obj); if (unshared) { doInitSerializable(obj, serializableClassDescriptor, discardMissing); final Object resolvedObject = obj == null ? null : objectResolver.readResolve(serializableClass.hasReadResolve() ? serializableClass.callReadResolve(obj) : obj); if (unshared) { final Class<?> type = descriptor.getType(); final SerializableClass serializableClass = registry.lookup(type); final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller(); final Externalizable obj; if (serializableClass.hasObjectInputConstructor()) { final SerializableClass serializableClass = registry.lookup(type); final Object obj; final BlockUnmarshaller blockUnmarshaller = getBlockUnmarshaller(); obj = externalizer.createExternal(type, blockUnmarshaller); instanceCache.set(idx, obj); final String name = readString(); final Enum obj = resolveEnumConstant(descriptor, name); final int idx = instanceCache.size(); instanceCache.add(obj);
final int index = readInt(); try { final Object obj = instanceCache.get(index); final int index = readByte() | 0xffffff00; try { final Object obj = instanceCache.get(index + instanceCache.size()); final int index = readShort() | 0xffff0000; try { final Object obj = instanceCache.get(index + instanceCache.size()); case ID_NEW_OBJECT_UNSHARED: { if (unshared != (leadByte == ID_NEW_OBJECT_UNSHARED)) { throw sharedMismatch(); return replace(doReadNewObject(readUnsignedByte(), unshared, discardMissing)); int length = readUnsignedByte(); final String s = UTFUtils.readUTFBytes(this, length == 0 ? 0x100 : length); instanceCache.add(s); int length = readUnsignedShort(); final String s = UTFUtils.readUTFBytes(this, length == 0 ? 0x10000 : length); instanceCache.add(s); int length = readInt(); if (length <= 0) { throw new StreamCorruptedException("Invalid length value for string in stream (" + length + ")");
private Object doReadArray(final int cnt, final boolean unshared, final boolean discardMissing) throws ClassNotFoundException, IOException { final int leadByte = readUnsignedByte(); switch (leadByte) { case ID_PRIM_BOOLEAN: { return doReadBooleanArray(cnt, unshared); return doReadByteArray(cnt, unshared); return doReadCharArray(cnt, unshared); return doReadDoubleArray(cnt, unshared); return doReadFloatArray(cnt, unshared); return doReadIntArray(cnt, unshared); return doReadLongArray(cnt, unshared); return doReadShortArray(cnt, unshared); return doReadObjectArray(cnt, doReadClassDescriptor(leadByte, true).getType(), unshared, discardMissing);