001    /**
002     * Implements the CFML Function UnserializeJava
003     */
004    package railo.runtime.functions.dynamicEvaluation;
005    
006    import java.io.ByteArrayInputStream;
007    import java.io.InputStream;
008    
009    import railo.commons.io.IOUtil;
010    import railo.runtime.PageContext;
011    import railo.runtime.converter.JavaConverter;
012    import railo.runtime.exp.PageException;
013    import railo.runtime.ext.function.Function;
014    import railo.runtime.op.Caster;
015    import railo.runtime.op.Decision;
016    
017    public final class EvaluateJava implements Function {
018    
019            private static final long serialVersionUID = 2665025287805145492L;
020    
021            public static Object call(PageContext pc , Object stringOrBinary) throws PageException {
022               // Binary
023                    if(Decision.isBinary(stringOrBinary)){
024                       InputStream is=null;
025                       try {
026                       is=new ByteArrayInputStream(Caster.toBinary(stringOrBinary));
027                               return JavaConverter.deserialize(is);
028                    }
029                        catch (Exception e) {
030                        throw Caster.toPageException(e);
031                    }
032                    finally {
033                            IOUtil.closeEL(is);
034                    }
035               }
036                    
037                    // STring
038                    try {
039                return JavaConverter.deserialize(Caster.toString(stringOrBinary));
040            } catch (Exception e) {
041                throw Caster.toPageException(e);
042            }
043            }
044    }