View Javadoc

1   /*
2    * $Id: ExpressionTransformerTestCase.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.test.transformers;
12  
13  import org.mule.api.transformer.TransformerException;
14  import org.mule.expression.ExpressionConfig;
15  import org.mule.expression.transformers.ExpressionArgument;
16  import org.mule.expression.transformers.ExpressionTransformer;
17  import org.mule.tck.AbstractMuleTestCase;
18  
19  import groovyjarjarasm.asm.ClassWriter;
20  import groovyjarjarasm.asm.Opcodes;
21  
22  public class ExpressionTransformerTestCase extends AbstractMuleTestCase
23  {
24  
25      /**
26       * See: MULE-4797 GroovyExpressionEvaluator script is unable to load user classes
27       * when used with hot deployment.
28       * 
29       * @throws TransformerException
30       */
31      public void testExpressionEvaluationClassLoader() throws ClassNotFoundException, TransformerException
32      {
33          ExpressionTransformer transformer = new ExpressionTransformer();
34          transformer.setMuleContext(muleContext);
35          transformer.addArgument(new ExpressionArgument("test", new ExpressionConfig(
36              "payload instanceof MyClass", "groovy", null), false));
37  
38          ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
39          try
40          {
41              Thread.currentThread().setContextClassLoader(new MyClassClassLoader());
42              transformer.initialise();
43          }
44          catch (Exception e)
45          {
46              fail(e.getMessage());
47          }
48          finally
49          {
50              Thread.currentThread().setContextClassLoader(originalClassLoader);
51          }
52  
53          assertFalse((Boolean) transformer.transform("test"));
54  
55      }
56  
57      class MyClassClassLoader extends ClassLoader
58      {
59          @Override
60          protected Class<?> findClass(String name) throws ClassNotFoundException
61          {
62              if (name.equals("MyClass"))
63              {
64                  ClassWriter cw = new ClassWriter(true);
65                  cw.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, "MyClass", null, "java/lang/Object", null);
66                  return defineClass(name, cw.toByteArray(), 0, cw.toByteArray().length);
67              }
68              else
69              {
70                  return super.findClass(name);
71              }
72          }
73      }
74  }