Add imports support in closures

This commit is contained in:
Dominik Przybysz 2015-12-22 15:24:06 +01:00
parent 261126d58b
commit 493bb8fd91
6 changed files with 237 additions and 171 deletions

View file

@ -2,11 +2,21 @@ package pl.touk.mockserver.server
import com.sun.net.httpserver.HttpExchange
import groovy.util.logging.Slf4j
import pl.touk.mockserver.api.common.ImportAlias
import pl.touk.mockserver.api.request.AddMock
import pl.touk.mockserver.api.request.MockServerRequest
import pl.touk.mockserver.api.request.PeekMock
import pl.touk.mockserver.api.request.RemoveMock
import pl.touk.mockserver.api.response.*
import pl.touk.mockserver.api.response.ExceptionOccured
import pl.touk.mockserver.api.response.MockAdded
import pl.touk.mockserver.api.response.MockEventReport
import pl.touk.mockserver.api.response.MockPeeked
import pl.touk.mockserver.api.response.MockRemoved
import pl.touk.mockserver.api.response.MockReport
import pl.touk.mockserver.api.response.MockRequestReport
import pl.touk.mockserver.api.response.MockResponseReport
import pl.touk.mockserver.api.response.Mocks
import pl.touk.mockserver.api.response.Parameter
import javax.xml.bind.JAXBContext
import java.util.concurrent.ConcurrentHashMap
@ -65,7 +75,8 @@ class HttpMockServer {
soap: it.soap,
method: it.method,
statusCode: it.statusCode as int,
schema: it.schema
schema: it.schema,
imports: it.imports.collect { new ImportAlias(alias: it.key, fullClassName: it.value) }
)
}
)
@ -90,6 +101,7 @@ class HttpMockServer {
private static Mock mockFromRequest(AddMock request) {
Mock mock = new Mock(request.name, request.path, request.port)
mock.imports = request.imports?.collectEntries { [(it.alias): it.fullClassName] } ?: [:]
mock.predicate = request.predicate
mock.response = request.response
mock.soap = request.soap

View file

@ -3,6 +3,8 @@ package pl.touk.mockserver.server
import groovy.transform.EqualsAndHashCode
import groovy.transform.PackageScope
import groovy.util.logging.Slf4j
import org.codehaus.groovy.control.CompilerConfiguration
import org.codehaus.groovy.control.customizers.ImportCustomizer
import pl.touk.mockserver.api.common.Method
import javax.xml.XMLConstants
@ -31,6 +33,7 @@ class Mock implements Comparable<Mock> {
final List<MockEvent> history = new CopyOnWriteArrayList<>()
String schema
private Validator validator
Map<String, String> imports = [:]
Mock(String name, String path, int port) {
if (!(name)) {
@ -88,7 +91,13 @@ class Mock implements Comparable<Mock> {
if (predicate ==~ /(?m).*System\s*\.\s*exit\s*\(.*/) {
throw new RuntimeException('System.exit is forbidden')
}
GroovyShell sh = new GroovyShell(this.class.classLoader);
CompilerConfiguration compilerConfiguration = new CompilerConfiguration()
ImportCustomizer customizer = new ImportCustomizer()
imports.each {
customizer.addImport(it.key, it.value)
}
compilerConfiguration.addCompilationCustomizers(customizer)
GroovyShell sh = new GroovyShell(this.class.classLoader, compilerConfiguration);
return sh.evaluate(predicate) as Closure
}