001 package railo.runtime.functions.other; 002 003 import java.io.ByteArrayInputStream; 004 import java.io.IOException; 005 import java.io.InputStream; 006 007 import railo.commons.io.IOUtil; 008 import railo.commons.io.res.Resource; 009 import railo.commons.io.res.util.ResourceUtil; 010 import railo.runtime.PageContext; 011 import railo.runtime.converter.JavaConverter; 012 import railo.runtime.exp.PageException; 013 import railo.runtime.op.Caster; 014 import railo.runtime.op.Decision; 015 016 public class ObjectLoad { 017 public synchronized static Object call(PageContext pc, Object input) throws PageException { 018 InputStream is; 019 boolean closeStream=true; 020 if(Decision.isBinary(input)) { 021 is=new ByteArrayInputStream(Caster.toBinary(input)); 022 } 023 else if(input instanceof InputStream) { 024 is=(InputStream)input; 025 closeStream=false; 026 } 027 else { 028 Resource res = ResourceUtil.toResourceExisting(pc, Caster.toString(input)); 029 pc.getConfig().getSecurityManager().checkFileLocation(res); 030 try { 031 is=res.getInputStream(); 032 } catch (IOException e) { 033 throw Caster.toPageException(e); 034 } 035 } 036 037 try { 038 return JavaConverter.deserialize(is); 039 } catch (Exception e) { 040 throw Caster.toPageException(e); 041 } 042 finally{ 043 if(closeStream)IOUtil.closeEL(is); 044 } 045 } 046 047 }