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    }