1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.support;
14
15 import groovy.lang.Binding;
16 import groovy.lang.GroovyClassLoader;
17 import groovy.lang.GroovyShell;
18
19 import java.io.File;
20
21 import com.eviware.soapui.SoapUI;
22
23 public class ScriptingSupport
24 {
25 public static SoapUIGroovyShell createGsroovyShell( Binding binding )
26 {
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 GroovyClassLoader groovyClassLoader = new GroovyClassLoader( SoapUI.class.getClassLoader() );
47 SoapUIGroovyShell groovyShell = binding == null ? new SoapUIGroovyShell( groovyClassLoader )
48 : new SoapUIGroovyShell( groovyClassLoader, binding );
49
50 return groovyShell;
51 }
52
53 public static class SoapUIGroovyShell extends GroovyShell
54 {
55 private final GroovyClassLoader classLoader;
56
57 protected SoapUIGroovyShell( GroovyClassLoader classLoader, Binding binding )
58 {
59 super( classLoader, binding );
60
61 this.classLoader = classLoader;
62
63 reloadExternalClasses();
64 }
65
66 protected SoapUIGroovyShell( GroovyClassLoader classLoader )
67 {
68 super( classLoader );
69
70 this.classLoader = classLoader;
71
72 reloadExternalClasses();
73 }
74
75 public void reloadExternalClasses()
76 {
77 resetLoadedClasses();
78 classLoader.clearCache();
79
80 try
81 {
82 File scripts = new File( new File( "" ).getAbsolutePath() + File.separatorChar + "scripts" );
83 if( scripts.exists() && scripts.isDirectory() )
84 {
85 File[] listFiles = scripts.listFiles();
86 for( File file : listFiles )
87 {
88 if( file.isDirectory() || !file.getName().endsWith( ".groovy" ) )
89 continue;
90
91 System.out.println( "parsing " + file.getAbsolutePath() );
92 classLoader.parseClass( file );
93 }
94 }
95 }
96 catch( Exception e )
97 {
98 SoapUI.logError( e );
99 }
100 }
101 }
102 }