01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one
03: * or more contributor license agreements. See the NOTICE file
04: * distributed with this work for additional information
05: * regarding copyright ownership. The ASF licenses this file
06: * to you under the Apache License, Version 2.0 (the
07: * "License"); you may not use this file except in compliance
08: * with the License. You may obtain a copy of the License at
09: *
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;
23:
24: import org.apache.mina.common.BufferDataException;
25: import org.apache.mina.common.IoBuffer;
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 IoBuffer#getObject(ClassLoader)}.
34: *
35: * @author The Apache MINA Project (dev@mina.apache.org)
36: * @version $Rev: 581234 $, $Date: 2007-10-02 07:39:48 -0600 (Tue, 02 Oct 2007) $
37: */
38: public class ObjectSerializationDecoder extends
39: CumulativeProtocolDecoder {
40: private final ClassLoader classLoader;
41:
42: private int maxObjectSize = 1048576; // 1MB
43:
44: /**
45: * Creates a new instance with the {@link ClassLoader} of
46: * the current thread.
47: */
48: public ObjectSerializationDecoder() {
49: this (Thread.currentThread().getContextClassLoader());
50: }
51:
52: /**
53: * Creates a new instance with the specified {@link ClassLoader}.
54: */
55: public ObjectSerializationDecoder(ClassLoader classLoader) {
56: if (classLoader == null) {
57: throw new NullPointerException("classLoader");
58: }
59: this .classLoader = classLoader;
60: }
61:
62: /**
63: * Returns the allowed maximum size of the object to be decoded.
64: * If the size of the object to be decoded exceeds this value, this
65: * decoder will throw a {@link BufferDataException}. The default
66: * value is <tt>1048576</tt> (1MB).
67: */
68: public int getMaxObjectSize() {
69: return maxObjectSize;
70: }
71:
72: /**
73: * Sets the allowed maximum size of the object to be decoded.
74: * If the size of the object to be decoded exceeds this value, this
75: * decoder will throw a {@link BufferDataException}. The default
76: * value is <tt>1048576</tt> (1MB).
77: */
78: public void setMaxObjectSize(int maxObjectSize) {
79: if (maxObjectSize <= 0) {
80: throw new IllegalArgumentException("maxObjectSize: "
81: + maxObjectSize);
82: }
83:
84: this .maxObjectSize = maxObjectSize;
85: }
86:
87: @Override
88: protected boolean doDecode(IoSession session, IoBuffer in,
89: ProtocolDecoderOutput out) throws Exception {
90: if (!in.prefixedDataAvailable(4, maxObjectSize)) {
91: return false;
92: }
93:
94: out.write(in.getObject(classLoader));
95: return true;
96: }
97: }
|