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 GroovyClassLoader groovyClassLoader = new GroovyClassLoader( SoapUI.class.getClassLoader());
46 SoapUIGroovyShell groovyShell = binding == null ? new SoapUIGroovyShell( groovyClassLoader ) :
47 new SoapUIGroovyShell( groovyClassLoader, binding );
48
49 return groovyShell;
50 }
51
52 public static class SoapUIGroovyShell extends GroovyShell
53 {
54 private final GroovyClassLoader classLoader;
55
56 protected SoapUIGroovyShell( GroovyClassLoader classLoader, Binding binding )
57 {
58 super( classLoader, binding );
59
60 this.classLoader = classLoader;
61
62 reloadExternalClasses();
63 }
64
65 protected SoapUIGroovyShell( GroovyClassLoader classLoader )
66 {
67 super( classLoader );
68
69 this.classLoader = classLoader;
70
71 reloadExternalClasses();
72 }
73
74 public void reloadExternalClasses()
75 {
76 resetLoadedClasses();
77 classLoader.clearCache();
78
79 try
80 {
81 File scripts = new File( new File( "" ).getAbsolutePath() + File.separatorChar + "scripts" );
82 if( scripts.exists() && scripts.isDirectory() )
83 {
84 File[] listFiles = scripts.listFiles();
85 for( File file : listFiles )
86 {
87 if( file.isDirectory() || !file.getName().endsWith( ".groovy" ) )
88 continue;
89
90 System.out.println( "parsing " + file.getAbsolutePath() );
91 classLoader.parseClass( file );
92 }
93 }
94 }
95 catch( Exception e )
96 {
97 SoapUI.logError( e );
98 }
99 }
100 }
101 }