1
2
3
4
5
6
7
8
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
27
28
29
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 }