001 /** 002 * Copyright 2010 The Kuali Foundation Licensed under the 003 * Educational Community License, Version 2.0 (the "License"); you may 004 * not use this file except in compliance with the License. You may 005 * obtain a copy of the License at 006 * 007 * http://www.osedu.org/licenses/ECL-2.0 008 * 009 * Unless required by applicable law or agreed to in writing, 010 * software distributed under the License is distributed on an "AS IS" 011 * BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 012 * or implied. See the License for the specific language governing 013 * permissions and limitations under the License. 014 */ 015 016 package org.kuali.student.common.ui.server.serialization; 017 018 import java.util.HashMap; 019 import java.util.Map; 020 021 import com.google.gwt.user.client.rpc.SerializationException; 022 import com.google.gwt.user.server.rpc.impl.LegacySerializationPolicy; 023 import com.google.gwt.user.server.rpc.impl.StandardSerializationPolicy; 024 025 /** 026 * Wrap the StandardSerializationPolicy and LegacySerializationPolicy to create 027 * customized SerializationPolicy 028 * 029 * @author Joe Yin 030 */ 031 public class KSSerializationPolicy extends StandardSerializationPolicy { 032 LegacySerializationPolicy legacySerializationPolicy = LegacySerializationPolicy.getInstance(); 033 034 public KSSerializationPolicy(Map<Class<?>, Boolean> whitelist) { 035 super(whitelist, whitelist, new HashMap<Class<?>, String>()); 036 } 037 038 /** 039 * Check both StandardSerializationPolicy and LegacySerializationPolicy 040 */ 041 @Override 042 public boolean shouldDeserializeFields(Class<?> clazz) { 043 return super.shouldDeserializeFields(clazz)||legacySerializationPolicy.shouldDeserializeFields(clazz); 044 } 045 046 /** 047 * Check both StandardSerializationPolicy and LegacySerializationPolicy 048 * 049 */ 050 @Override 051 public boolean shouldSerializeFields(Class<?> clazz) { 052 return super.shouldSerializeFields(clazz)||legacySerializationPolicy.shouldSerializeFields(clazz); 053 } 054 055 /** 056 * Validates that the specified class should be deserialized from a stream. 057 * Check both StandardSerializationPolicy and LegacySerializationPolicy 058 * 059 * @param clazz the class to validate 060 * @throws SerializationException if the class is not allowed to be 061 * deserialized 062 */ 063 @Override 064 public void validateDeserialize(Class<?> clazz) 065 throws SerializationException{ 066 boolean throwedFromStandardSerializationPolicy = false; 067 boolean throwedFromLegacySerializationPolicy = false; 068 try{ 069 super.validateDeserialize(clazz); 070 }catch(SerializationException e){ 071 throwedFromStandardSerializationPolicy = true; 072 } 073 try{ 074 legacySerializationPolicy.validateDeserialize(clazz); 075 }catch(SerializationException e){ 076 throwedFromLegacySerializationPolicy = true; 077 } 078 079 if(throwedFromStandardSerializationPolicy && 080 throwedFromLegacySerializationPolicy){ 081 throw new SerializationException( 082 "Type '" 083 + clazz.getName() 084 + "' was not included in the set of types which can be deserialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be deserialized."); 085 } 086 } 087 088 /** 089 * Validates that the specified class should be serialized into a stream. 090 * Check both StandardSerializationPolicy and LegacySerializationPolicy 091 * 092 * @param clazz the class to validate 093 * @throws SerializationException if the class is not allowed to be serialized 094 */ 095 @Override 096 public void validateSerialize(Class<?> clazz) 097 throws SerializationException{ 098 boolean throwedFromStandardSerializationPolicy = false; 099 boolean throwedFromLegacySerializationPolicy = false; 100 try{ 101 super.validateSerialize(clazz); 102 }catch(SerializationException e){ 103 throwedFromStandardSerializationPolicy = true; 104 } 105 try{ 106 legacySerializationPolicy.validateSerialize(clazz); 107 }catch(SerializationException e){ 108 throwedFromLegacySerializationPolicy = true; 109 } 110 111 if(throwedFromStandardSerializationPolicy && 112 throwedFromLegacySerializationPolicy){ 113 throw new SerializationException( 114 "Type '" 115 + clazz.getName() 116 + "' was not included in the set of types which can be serialized by this SerializationPolicy or its Class object could not be loaded. For security purposes, this type will not be serialized."); 117 } 118 } 119 }