
com.consol.citrus.message.builder.script.GroovyScriptPayloadBuilder Maven / Gradle / Ivy
/*
* Copyright 2020 the original author or authors.
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.consol.citrus.message.builder.script;
import com.consol.citrus.context.TestContext;
import com.consol.citrus.exceptions.CitrusRuntimeException;
import com.consol.citrus.message.MessagePayloadBuilder;
import com.consol.citrus.validation.script.TemplateBasedScriptBuilder;
import groovy.lang.GroovyClassLoader;
import groovy.lang.GroovyObject;
import org.codehaus.groovy.control.CompilationFailedException;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
/**
* @author Christoph Deppisch
*/
public class GroovyScriptPayloadBuilder implements MessagePayloadBuilder {
/** Default path to script template */
private final Resource scriptTemplateResource = new ClassPathResource("com/consol/citrus/script/markup-builder-template.groovy");
private final String script;
/**
* Default constructor using payload script.
* @param script
*/
public GroovyScriptPayloadBuilder(String script) {
this.script = script;
}
@Override
public Object buildPayload(TestContext context) {
return buildMarkupBuilderScript(context.replaceDynamicContentInString(script));
}
/**
* Builds an automatic Groovy MarkupBuilder script with given script body.
*
* @param scriptData
* @return
*/
protected String buildMarkupBuilderScript(String scriptData) {
try {
ClassLoader parent = GroovyScriptPayloadBuilder.class.getClassLoader();
GroovyClassLoader loader = new GroovyClassLoader(parent);
Class> groovyClass = loader.parseClass(TemplateBasedScriptBuilder.fromTemplateResource(scriptTemplateResource)
.withCode(scriptData)
.build());
if (groovyClass == null) {
throw new CitrusRuntimeException("Could not load groovy script!");
}
GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();
return (String) groovyObject.invokeMethod("run", new Object[] {});
} catch (CompilationFailedException | InstantiationException | IllegalAccessException e) {
throw new CitrusRuntimeException(e);
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy