You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by tr...@apache.org on 2006/09/20 07:09:44 UTC
svn commit: r448067 - in
/directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization:
ObjectSerializationInputStream.java ObjectSerializationOutputStream.java
Author: trustin
Date: Tue Sep 19 22:09:43 2006
New Revision: 448067
URL: http://svn.apache.org/viewvc?view=rev&rev=448067
Log:
Resolved issue: DIRMINA-161 (A ObjectSerializationEncoder that works with Java's ObjectInputStream.readObject())
* Added ObjectSerializationInput/OutputStream
Added:
directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationInputStream.java (with props)
directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationOutputStream.java (with props)
Added: directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationInputStream.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationInputStream.java?view=auto&rev=448067
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationInputStream.java (added)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationInputStream.java Tue Sep 19 22:09:43 2006
@@ -0,0 +1,208 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.mina.filter.codec.serialization;
+
+import java.io.DataInput;
+import java.io.DataInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.ObjectInput;
+import java.io.StreamCorruptedException;
+
+import org.apache.mina.common.BufferDataException;
+import org.apache.mina.common.ByteBuffer;
+
+/**
+ * An {@link ObjectInput} and {@link InputStream} that can read the objects encoded
+ * by {@link ObjectSerializationEncoder}.
+ *
+ * @author The Apache Directory Project (mina-dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class ObjectSerializationInputStream extends InputStream implements ObjectInput {
+
+ private final DataInputStream in;
+ private final ClassLoader classLoader;
+ private int maxObjectSize = 1048576;
+
+ public ObjectSerializationInputStream( InputStream in )
+ {
+ this( in, null );
+ }
+
+ public ObjectSerializationInputStream( InputStream in, ClassLoader classLoader )
+ {
+ if( in == null )
+ {
+ throw new NullPointerException( "in" );
+ }
+ if( classLoader == null )
+ {
+ classLoader = Thread.currentThread().getContextClassLoader();
+ }
+
+ if( in instanceof DataInputStream )
+ {
+ this.in = ( DataInputStream ) in;
+ }
+ else
+ {
+ this.in = new DataInputStream( in );
+ }
+
+ this.classLoader = classLoader;
+ }
+
+ /**
+ * Returns the allowed maximum size of the object to be decoded.
+ * If the size of the object to be decoded exceeds this value, this
+ * decoder will throw a {@link BufferDataException}. The default
+ * value is <tt>1048576</tt> (1MB).
+ */
+ public int getMaxObjectSize()
+ {
+ return maxObjectSize;
+ }
+
+ /**
+ * Sets the allowed maximum size of the object to be decoded.
+ * If the size of the object to be decoded exceeds this value, this
+ * decoder will throw a {@link BufferDataException}. The default
+ * value is <tt>1048576</tt> (1MB).
+ */
+ public void setMaxObjectSize( int maxObjectSize )
+ {
+ if( maxObjectSize <= 0 )
+ {
+ throw new IllegalArgumentException( "maxObjectSize: " + maxObjectSize );
+ }
+
+ this.maxObjectSize = maxObjectSize;
+ }
+
+ public int read() throws IOException
+ {
+ return in.read();
+ }
+
+ public Object readObject() throws ClassNotFoundException, IOException
+ {
+ int objectSize = in.readInt();
+ if( objectSize <= 0 )
+ {
+ throw new StreamCorruptedException( "Invalid objectSize: " + objectSize );
+ }
+ if( objectSize > maxObjectSize )
+ {
+ throw new StreamCorruptedException(
+ "ObjectSize too big: " + objectSize +
+ " (expected: <= " + maxObjectSize + ')' );
+ }
+
+ ByteBuffer buf = ByteBuffer.allocate( objectSize + 4, false );
+ buf.putInt( objectSize );
+ in.readFully( buf.array(), 4, objectSize );
+ buf.position( 0 );
+ buf.limit( objectSize );
+
+ Object answer = buf.getObject( classLoader );
+ buf.release();
+ return answer;
+ }
+
+ public boolean readBoolean() throws IOException
+ {
+ return in.readBoolean();
+ }
+
+ public byte readByte() throws IOException
+ {
+ return in.readByte();
+ }
+
+ public char readChar() throws IOException
+ {
+ return in.readChar();
+ }
+
+ public double readDouble() throws IOException
+ {
+ return in.readDouble();
+ }
+
+ public float readFloat() throws IOException
+ {
+ return in.readFloat();
+ }
+
+ public void readFully( byte[] b ) throws IOException
+ {
+ in.readFully( b );
+ }
+
+ public void readFully( byte[] b, int off, int len ) throws IOException
+ {
+ in.readFully( b, off, len );
+ }
+
+ public int readInt() throws IOException
+ {
+ return in.readInt();
+ }
+
+ /**
+ * @see DataInput#readLine()
+ * @deprecated
+ */
+ public String readLine() throws IOException
+ {
+ return in.readLine();
+ }
+
+ public long readLong() throws IOException
+ {
+ return in.readLong();
+ }
+
+ public short readShort() throws IOException
+ {
+ return in.readShort();
+ }
+
+ public String readUTF() throws IOException
+ {
+ return in.readUTF();
+ }
+
+ public int readUnsignedByte() throws IOException
+ {
+ return in.readUnsignedByte();
+ }
+
+ public int readUnsignedShort() throws IOException
+ {
+ return in.readUnsignedShort();
+ }
+
+ public int skipBytes(int n) throws IOException
+ {
+ return in.skipBytes( n );
+ }
+}
Propchange: directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationInputStream.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision
Added: directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationOutputStream.java
URL: http://svn.apache.org/viewvc/directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationOutputStream.java?view=auto&rev=448067
==============================================================================
--- directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationOutputStream.java (added)
+++ directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationOutputStream.java Tue Sep 19 22:09:43 2006
@@ -0,0 +1,181 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.mina.filter.codec.serialization;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.OutputStream;
+
+import org.apache.mina.common.ByteBuffer;
+
+/**
+ * An {@link ObjectOutput} and {@link OutputStream} that can write the objects as
+ * the serialized form that {@link ObjectSerializationDecoder} can decode.
+ *
+ * @author The Apache Directory Project (mina-dev@directory.apache.org)
+ * @version $Rev$, $Date$
+ */
+public class ObjectSerializationOutputStream extends OutputStream implements ObjectOutput {
+
+ private final DataOutputStream out;
+ private int maxObjectSize = Integer.MAX_VALUE;
+
+ public ObjectSerializationOutputStream( OutputStream out )
+ {
+ if( out == null )
+ {
+ throw new NullPointerException( "out" );
+ }
+
+ if( out instanceof DataOutputStream )
+ {
+ this.out = ( DataOutputStream ) out;
+ }
+ else
+ {
+ this.out = new DataOutputStream( out );
+ }
+ }
+
+ /**
+ * Returns the allowed maximum size of the encoded object.
+ * If the size of the encoded object exceeds this value, this encoder
+ * will throw a {@link IllegalArgumentException}. The default value
+ * is {@link Integer#MAX_VALUE}.
+ */
+ public int getMaxObjectSize()
+ {
+ return maxObjectSize;
+ }
+
+ /**
+ * Sets the allowed maximum size of the encoded object.
+ * If the size of the encoded object exceeds this value, this encoder
+ * will throw a {@link IllegalArgumentException}. The default value
+ * is {@link Integer#MAX_VALUE}.
+ */
+ public void setMaxObjectSize( int maxObjectSize )
+ {
+ if( maxObjectSize <= 0 )
+ {
+ throw new IllegalArgumentException( "maxObjectSize: " + maxObjectSize );
+ }
+
+ this.maxObjectSize = maxObjectSize;
+ }
+
+ public void close() throws IOException
+ {
+ out.close();
+ }
+
+ public void flush() throws IOException
+ {
+ out.flush();
+ }
+
+ public void write( int b ) throws IOException
+ {
+ out.write( b );
+ }
+
+ public void write( byte[] b ) throws IOException
+ {
+ out.write( b );
+ }
+
+ public void write( byte[] b, int off, int len ) throws IOException
+ {
+ out.write( b, off, len );
+ }
+
+ public void writeObject( Object obj ) throws IOException
+ {
+ ByteBuffer buf = ByteBuffer.allocate( 64, false );
+ buf.setAutoExpand( true );
+ buf.putObject( obj );
+
+ int objectSize = buf.position() - 4;
+ if( objectSize > maxObjectSize )
+ {
+ buf.release();
+ throw new IllegalArgumentException( "The encoded object is too big: " + objectSize + " (> " + maxObjectSize + ')' );
+ }
+
+ out.write( buf.array(), 0, buf.position() );
+ buf.release();
+ }
+
+ public void writeBoolean( boolean v ) throws IOException
+ {
+ out.writeBoolean( v );
+ }
+
+ public void writeByte( int v ) throws IOException
+ {
+ out.writeByte( v );
+ }
+
+ public void writeBytes( String s ) throws IOException
+ {
+ out.writeBytes( s );
+ }
+
+ public void writeChar( int v ) throws IOException
+ {
+ out.writeChar( v );
+ }
+
+ public void writeChars( String s ) throws IOException
+ {
+ out.writeChars( s );
+ }
+
+ public void writeDouble( double v ) throws IOException
+ {
+ out.writeDouble( v );
+ }
+
+ public void writeFloat( float v ) throws IOException
+ {
+ out.writeFloat( v );
+ }
+
+ public void writeInt( int v ) throws IOException
+ {
+ out.writeInt( v );
+ }
+
+ public void writeLong( long v ) throws IOException
+ {
+ out.writeLong( v );
+ }
+
+ public void writeShort( int v ) throws IOException
+ {
+ out.writeShort( v );
+ }
+
+ public void writeUTF( String str ) throws IOException
+ {
+ out.writeUTF( str );
+ }
+}
Propchange: directory/trunks/mina/core/src/main/java/org/apache/mina/filter/codec/serialization/ObjectSerializationOutputStream.java
------------------------------------------------------------------------------
svn:keywords = HeadURL Id LastChangedBy LastChangedDate LastChangedRevision