Moved scripting support from core to scripting

spring-integration-test: Enhanced RequestResponseScenario test framework

 changed scripting namespace URIs to standard pattern
This commit is contained in:
David Turanski
2011-09-21 06:20:28 -04:00
committed by Mark Fisher
parent b6294fc602
commit 08f81ae51d
33 changed files with 123 additions and 52 deletions

View File

@@ -266,6 +266,7 @@ project('spring-integration-groovy') {
description = 'Spring Integration Groovy Support'
dependencies {
compile project(":spring-integration-core")
compile project(":spring-integration-scripting")
compile "org.codehaus.groovy:groovy-all:1.7.5"
compile "org.springframework:spring-context-support:$springVersion"
}

View File

@@ -1,6 +1,4 @@
http\://www.springframework.org/schema/integration/spring-integration-1.0.xsd=org/springframework/integration/config/xml/spring-integration-1.0.xsd
http\://www.springframework.org/schema/integration/spring-integration-2.0.xsd=org/springframework/integration/config/xml/spring-integration-2.0.xsd
http\://www.springframework.org/schema/integration/spring-integration-2.1.xsd=org/springframework/integration/config/xml/spring-integration-2.1.xsd
http\://www.springframework.org/schema/integration/spring-integration.xsd=org/springframework/integration/config/xml/spring-integration-2.1.xsd
http\://www.springframework.org/schema/integration/scripting/spring-integration-scripting-core.xsd=org/springframework/integration/scripting/config/xml/spring-integration-scripting-core-2.1.xsd
http\://www.springframework.org/schema/integration/scripting/spring-integration-scripting-core-2.1.xsd=org/springframework/integration/scripting/config/xml/spring-integration-scripting-core-2.1.xsd
http\://www.springframework.org/schema/integration/spring-integration.xsd=org/springframework/integration/config/xml/spring-integration-2.1.xsd

View File

@@ -18,13 +18,14 @@ package org.springframework.integration.groovy.config;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.integration.config.xml.AbstractScriptParser;
import org.springframework.integration.scripting.config.AbstractScriptParser;
import org.springframework.integration.config.xml.IntegrationNamespaceUtils;
import org.w3c.dom.Element;
/**
* @author Mark Fisher
* @author Oleg Zhurakousky
* @author David Turanski
* @since 2.0
*/
public class GroovyScriptParser extends AbstractScriptParser {

View File

@@ -1,3 +1,3 @@
http\://www.springframework.org/schema/integration/groovy/spring-integration-groovy-2.0.xsd=org/springframework/integration/groovy/config/spring-integration-groovy-2.0.xsd
http\://www.springframework.org/schema/integration/groovy/spring-integration-groovy-2.1.xsd=org/springframework/integration/groovy/config/spring-integration-groovy-2.1.xsd
http\://www.springframework.org/schema/integration/groovy/spring-integration-groovy.xsd=org/springframework/integration/groovy/config/spring-integration-groovy-2.1.xsd
http\://www.springframework.org/schema/integration/groovy/spring-integration-groovy.xsd=org/springframework/integration/groovy/config/spring-integration-groovy-2.1.xsd

View File

@@ -10,7 +10,7 @@
* 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 org.springframework.integration.config.xml;
package org.springframework.integration.scripting.config;
import java.util.List;
@@ -21,6 +21,7 @@ import org.springframework.beans.factory.support.ManagedMap;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.beans.factory.xml.XmlReaderContext;
import org.springframework.integration.config.xml.IntegrationNamespaceUtils;
import org.springframework.scripting.support.StaticScriptSource;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;

View File

@@ -18,7 +18,7 @@ package org.springframework.integration.scripting.config.jsr223;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.integration.config.xml.AbstractScriptParser;
import org.springframework.integration.scripting.config.AbstractScriptParser;
import org.springframework.integration.scripting.jsr223.DefaultScriptExecutor;
import org.springframework.util.Assert;
import org.w3c.dom.Element;

View File

@@ -1 +1 @@
http\://www.springframework.org/schema/integration/script=org.springframework.integration.scripting.config.jsr223.ScriptNamespaceHandler
http\://www.springframework.org/schema/integration/scripting=org.springframework.integration.scripting.config.jsr223.ScriptNamespaceHandler

View File

@@ -1,2 +1,4 @@
http\://www.springframework.org/schema/integration/script-2.1.xsd=org/springframework/integration/script/config/spring-integration-script-2.1.xsd
http\://www.springframework.org/schema/integration/script.xsd=org/springframework/integration/script/config/spring-integration-script-2.1.xsd
http\://www.springframework.org/schema/integration/scripting/spring-integration-scripting-2.1.xsd=org/springframework/integration/scripting/config/spring-integration-scripting-2.1.xsd
http\://www.springframework.org/schema/integration/scripting/spring-integration-scripting.xsd=org/springframework/integration/scripting/config/spring-integration-scripting-2.1.xsd
http\://www.springframework.org/schema/integration/scripting/spring-integration-scripting-core-2.1.xsd=org/springframework/integration/scripting/config/spring-integration-scripting-core-2.1.xsd
http\://www.springframework.org/schema/integration/scripting/spring-integration-scripting-core.xsd=org/springframework/integration/scripting/config/spring-integration-scripting-core-2.1.xsd

View File

@@ -1,4 +1,4 @@
# Tooling related information for the integration script namespace
http\://www.springframework.org/schema/integration/script@name=integration script Namespace
http\://www.springframework.org/schema/integration/script@prefix=int-script
http\://www.springframework.org/schema/integration/script@icon=org/springframework/integration/script/config/spring-integration-script.gif
# Tooling related information for the integration scripting namespace
http\://www.springframework.org/schema/integration/scripting@name=integration scripting Namespace
http\://www.springframework.org/schema/integration/scripting@prefix=int-script
http\://www.springframework.org/schema/integration/scripting@icon=org/springframework/integration/scripting/config/spring-integration-scripting.gif

View File

@@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.springframework.org/schema/integration/script"
<xsd:schema xmlns="http://www.springframework.org/schema/integration/scripting"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.springframework.org/schema/integration/script"
targetNamespace="http://www.springframework.org/schema/integration/scripting"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xsd:include

View File

@@ -2,10 +2,10 @@
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:script="http://www.springframework.org/schema/integration/script"
xmlns:script="http://www.springframework.org/schema/integration/scripting"
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/script http://www.springframework.org/schema/integration/script.xsd">
http://www.springframework.org/schema/integration/scripting http://www.springframework.org/schema/integration/scripting/spring-integration-scripting.xsd">
<filter input-channel="referencedScriptInput">
<script:script lang="groovy" location="org/springframework/integration/scripting/config/jsr223/Jsr223FilterTests.groovy"/>

View File

@@ -2,10 +2,10 @@
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:script="http://www.springframework.org/schema/integration/script"
xmlns:script="http://www.springframework.org/schema/integration/scripting"
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/script http://www.springframework.org/schema/integration/script.xsd">
http://www.springframework.org/schema/integration/scripting http://www.springframework.org/schema/integration/scripting/spring-integration-scripting.xsd">
<int:channel id="inputA"/>

View File

@@ -2,10 +2,10 @@
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:script="http://www.springframework.org/schema/integration/script"
xmlns:script="http://www.springframework.org/schema/integration/scripting"
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/script http://www.springframework.org/schema/integration/script.xsd">
http://www.springframework.org/schema/integration/scripting http://www.springframework.org/schema/integration/scripting/spring-integration-scripting.xsd">
<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer" xmlns="http://www.springframework.org/schema/beans">
<property name="customEditors">

View File

@@ -2,10 +2,10 @@
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:int-script="http://www.springframework.org/schema/integration/script"
xmlns:int-script="http://www.springframework.org/schema/integration/scripting"
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/script http://www.springframework.org/schema/integration/script.xsd">
http://www.springframework.org/schema/integration/scripting http://www.springframework.org/schema/integration/scripting/spring-integration-scripting.xsd">
<channel id="shortStrings">
<queue/>

View File

@@ -3,11 +3,11 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:script="http://www.springframework.org/schema/integration/script"
xmlns:script="http://www.springframework.org/schema/integration/scripting"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/script http://www.springframework.org/schema/integration/script.xsd">
http://www.springframework.org/schema/integration/scripting http://www.springframework.org/schema/integration/scripting/spring-integration-scripting.xsd">
<service-activator input-channel="referencedScriptInput">
<script:script

View File

@@ -2,10 +2,10 @@
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:script="http://www.springframework.org/schema/integration/script"
xmlns:script="http://www.springframework.org/schema/integration/scripting"
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/script http://www.springframework.org/schema/integration/script.xsd">
http://www.springframework.org/schema/integration/scripting http://www.springframework.org/schema/integration/scripting/spring-integration-scripting.xsd">
<service-activator input-channel="inlineScriptInput">
<script:script lang="ruby">

View File

@@ -2,10 +2,10 @@
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:script="http://www.springframework.org/schema/integration/script"
xmlns:script="http://www.springframework.org/schema/integration/scripting"
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/script http://www.springframework.org/schema/integration/script.xsd">
http://www.springframework.org/schema/integration/scripting http://www.springframework.org/schema/integration/scripting/spring-integration-scripting.xsd">
<service-activator input-channel="withScriptVariableGenerator">
<script:script lang="ruby" location="org/springframework/integration/scripting/config/jsr223/Jsr223ServiceActivatorTests.rb"

View File

@@ -3,10 +3,10 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:jsr223="http://www.springframework.org/schema/integration/jsr223"
xmlns:script="http://www.springframework.org/schema/integration/script"
xmlns:script="http://www.springframework.org/schema/integration/scripting"
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/script http://www.springframework.org/schema/integration/script.xsd
http://www.springframework.org/schema/integration/scripting http://www.springframework.org/schema/integration/scripting/spring-integration-scripting.xsd
http://www.springframework.org/schema/integration/jsr223 http://www.springframework.org/schema/integration/jsr223/spring-integration-jsr223.xsd">
<splitter input-channel="referencedScriptInput">

View File

@@ -2,10 +2,10 @@
<beans:beans xmlns="http://www.springframework.org/schema/integration"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:script="http://www.springframework.org/schema/integration/script"
xmlns:script="http://www.springframework.org/schema/integration/scripting"
xsi:schemaLocation="http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration/script http://www.springframework.org/schema/integration/script.xsd">
http://www.springframework.org/schema/integration/scripting http://www.springframework.org/schema/integration/scripting/spring-integration-scripting.xsd">
<transformer input-channel="referencedScriptInput">
<script:script

View File

@@ -63,13 +63,11 @@ public abstract class AbstractRequestResponseScenarioTest {
if (outputChannel instanceof PollableChannel){
Message<?> response = ((PollableChannel) outputChannel).receive(10000);
assertNotNull(name + ": receive timeout on " + scenario.getOutputChannelName(),response);
if (scenario.getResponseValidator() instanceof PayloadValidator){
scenario.getResponseValidator().validateResponse(response.getPayload());
} else {
scenario.getResponseValidator().validateResponse(response);
}
scenario.getResponseValidator().handleMessage(response);
}
assertNotNull("message was not handled on " + outputChannel + " for scenario '" + scenario.getName() + "'.",
scenario.getResponseValidator().getLastMessage());
}
}
/**

View File

@@ -8,20 +8,33 @@ import org.springframework.integration.core.MessageHandler;
* @author David Turanski
*
*/
public abstract class AbstractResponseValidator implements MessageHandler {
public abstract class AbstractResponseValidator<T> implements MessageHandler {
private Message<?> lastMessage;
/**
* handle the message
*/
@SuppressWarnings("unchecked")
//@Override
public void handleMessage(Message<?> message) throws MessagingException {
validateResponse(extractPayload()? message.getPayload(): message );
this.lastMessage = message;
validateResponse((T) (extractPayload()? message.getPayload(): message ));
}
/**
* Implement this method to validate the response (Message or Payload)
* @param response
*/
protected abstract void validateResponse(Object response);
protected abstract void validateResponse(T response);
/**
* If true will extract the payload as the parameter for validateResponse()
* @return true to extract the payload; false to process the message.
*/
protected abstract boolean extractPayload();
/**
* @return the lastMessage
*/
public Message<?> getLastMessage() {
return lastMessage;
}
}

View File

@@ -7,12 +7,12 @@ import org.springframework.integration.Message;
* @author David Turanski
*
*/
public abstract class MessageValidator extends AbstractResponseValidator {
public abstract class MessageValidator extends AbstractResponseValidator<Message<?>> {
protected final boolean extractPayload(){
return false;
}
protected final void validateResponse(Object response){
protected final void validateResponse(Message<?> response){
validateMessage((Message<?>) response);
}
/**

View File

@@ -5,7 +5,7 @@ package org.springframework.integration.test.support;
* @author David Turanski
*
*/
public abstract class PayloadValidator extends AbstractResponseValidator {
public abstract class PayloadValidator<T> extends AbstractResponseValidator<T> {
protected final boolean extractPayload(){
return true;
}

View File

@@ -14,7 +14,7 @@ public class RequestResponseScenario {
private final String outputChannelName;
private Object payload;
private Message<?> message;
private AbstractResponseValidator responseValidator;
private AbstractResponseValidator<?> responseValidator;
private String name;
protected Message<? extends Object> getMessage(){
@@ -91,7 +91,7 @@ public class RequestResponseScenario {
* @return the response validator
* @see AbstractResponseValidator
*/
public AbstractResponseValidator getResponseValidator(){
public AbstractResponseValidator<?> getResponseValidator(){
return responseValidator;
}
@@ -101,7 +101,7 @@ public class RequestResponseScenario {
* @param responseValidator
* @return
*/
public RequestResponseScenario setResponseValidator(AbstractResponseValidator responseValidator) {
public RequestResponseScenario setResponseValidator(AbstractResponseValidator<?> responseValidator) {
this.responseValidator = responseValidator;
return this;
}

View File

@@ -0,0 +1,31 @@
/*
* Copyright 2002-2011 the original author or authors.
*
* Licensed 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 org.springframework.integration.test.support;
import java.util.Collections;
import java.util.List;
/**
* Convenience class for a single {@link RequestResponsScenario} test
* @author David Turanski
*
*/
public abstract class SingleRequestResponseScenarioTest extends AbstractRequestResponseScenarioTest {
@Override
protected List<RequestResponseScenario> defineRequestResponseScenarios() {
return Collections.singletonList(defineRequestResponseScenario());
}
protected abstract RequestResponseScenario defineRequestResponseScenario();
}

View File

@@ -21,9 +21,9 @@ public class MessageScenariosTest extends AbstractRequestResponseScenarioTest {
RequestResponseScenario scenario1 = new RequestResponseScenario(
"inputChannel","outputChannel")
.setPayload("hello")
.setResponseValidator(new PayloadValidator() {
.setResponseValidator(new PayloadValidator<String>() {
@Override
protected void validateResponse(Object response) {
protected void validateResponse(String response) {
assertEquals("HELLO",response);
}
});

View File

@@ -0,0 +1,26 @@
package org.springframework.integration.test.support;
import static org.junit.Assert.assertEquals;
import org.springframework.test.context.ContextConfiguration;
@ContextConfiguration("MessageScenariosTest-context.xml")
public class SingleScenarioTest extends SingleRequestResponseScenarioTest {
/* (non-Javadoc)
* @see org.springframework.integration.test.support.SingleRequestResponseScenarioTest#defineRequestResponseScenario()
*/
@Override
protected RequestResponseScenario defineRequestResponseScenario() {
RequestResponseScenario scenario = new RequestResponseScenario(
"inputChannel","outputChannel")
.setPayload("hello")
.setResponseValidator(new PayloadValidator<String>() {
@Override
protected void validateResponse(String response) {
assertEquals("HELLO",response);
}
});
return scenario;
}
}