KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > mina > filter > codec > serialization > ObjectSerializationDecoder


1 /*
2  * Licensed to the Apache Software Foundation (ASF) under one
3  * or more contributor license agreements. See the NOTICE file
4  * distributed with this work for additional information
5  * regarding copyright ownership. The ASF licenses this file
6  * to you under the Apache License, Version 2.0 (the
7  * "License"); you may not use this file except in compliance
8  * with the License. You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing,
13  * software distributed under the License is distributed on an
14  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15  * KIND, either express or implied. See the License for the
16  * specific language governing permissions and limitations
17  * under the License.
18  *
19  */

20 package org.apache.mina.filter.codec.serialization;
21
22 import java.io.Serializable JavaDoc;
23
24 import org.apache.mina.common.BufferDataException;
25 import org.apache.mina.common.ByteBuffer;
26 import org.apache.mina.common.IoSession;
27 import org.apache.mina.filter.codec.CumulativeProtocolDecoder;
28 import org.apache.mina.filter.codec.ProtocolDecoder;
29 import org.apache.mina.filter.codec.ProtocolDecoderOutput;
30
31 /**
32  * A {@link ProtocolDecoder} which deserializes {@link Serializable} Java
33  * objects using {@link ByteBuffer#getObject(ClassLoader)}.
34  *
35  * @author The Apache Directory Project (mina-dev@directory.apache.org)
36  * @version $Rev: 555855 $, $Date: 2007-07-13 12:19:00 +0900 (금, 13 7월 2007) $
37  */

38 public class ObjectSerializationDecoder extends CumulativeProtocolDecoder {
39     private final ClassLoader JavaDoc classLoader;
40
41     private int maxObjectSize = 1048576; // 1MB
42

43     /**
44      * Creates a new instance with the {@link ClassLoader} of
45      * the current thread.
46      */

47     public ObjectSerializationDecoder() {
48         this(Thread.currentThread().getContextClassLoader());
49     }
50
51     /**
52      * Creates a new instance with the specified {@link ClassLoader}.
53      */

54     public ObjectSerializationDecoder(ClassLoader JavaDoc classLoader) {
55         if (classLoader == null) {
56             throw new NullPointerException JavaDoc("classLoader");
57         }
58         this.classLoader = classLoader;
59     }
60
61     /**
62      * Returns the allowed maximum size of the object to be decoded.
63      * If the size of the object to be decoded exceeds this value, this
64      * decoder will throw a {@link BufferDataException}. The default
65      * value is <tt>1048576</tt> (1MB).
66      */

67     public int getMaxObjectSize() {
68         return maxObjectSize;
69     }
70
71     /**
72      * Sets the allowed maximum size of the object to be decoded.
73      * If the size of the object to be decoded exceeds this value, this
74      * decoder will throw a {@link BufferDataException}. The default
75      * value is <tt>1048576</tt> (1MB).
76      */

77     public void setMaxObjectSize(int maxObjectSize) {
78         if (maxObjectSize <= 0) {
79             throw new IllegalArgumentException JavaDoc("maxObjectSize: "
80                     + maxObjectSize);
81         }
82
83         this.maxObjectSize = maxObjectSize;
84     }
85
86     protected boolean doDecode(IoSession session, ByteBuffer in,
87             ProtocolDecoderOutput out) throws Exception JavaDoc {
88         if (!in.prefixedDataAvailable(4, maxObjectSize)) {
89             return false;
90         }
91
92         out.write(in.getObject(classLoader));
93         return true;
94     }
95 }
96
Popular Tags