Added support for <console-source/> and <console-target/> elements.

This commit is contained in:
Mark Fisher
2008-04-28 22:12:12 +00:00
parent d252605bdb
commit b85d38641c
11 changed files with 452 additions and 1 deletions

View File

@@ -1,3 +1,5 @@
console-source=org.springframework.integration.adapter.stream.config.ConsoleSourceParser
console-target=org.springframework.integration.adapter.stream.config.ConsoleTargetParser
file-source=org.springframework.integration.adapter.file.config.FileSourceParser
file-target=org.springframework.integration.adapter.file.config.FileTargetAdapterParser
ftp-source=org.springframework.integration.adapter.ftp.config.FtpSourceParser

View File

@@ -178,6 +178,32 @@
</xsd:complexType>
</xsd:element>
<xsd:element name="console-source">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
Configures a source that reads from stdin (System.in).
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="id" type="xsd:string"/>
<xsd:attribute name="charset" type="xsd:string"/>
</xsd:complexType>
</xsd:element>
<xsd:element name="console-target">
<xsd:complexType>
<xsd:annotation>
<xsd:documentation>
Configures a target that writes to stdout (System.out) or to stderr (System.err)
if the "error" attribute is set to true.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="id" type="xsd:string"/>
<xsd:attribute name="charset" type="xsd:string"/>
<xsd:attribute name="error" type="xsd:boolean" default="false"/>
</xsd:complexType>
</xsd:element>
<xsd:complexType name="requestReplySource">
<xsd:annotation>
<xsd:documentation>

View File

@@ -20,8 +20,9 @@ import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.UnsupportedEncodingException;
import org.springframework.integration.channel.MessageChannel;
import org.springframework.integration.ConfigurationException;
import org.springframework.integration.message.MessagingException;
import org.springframework.integration.message.PollableSource;
import org.springframework.integration.message.StringMessage;
@@ -78,4 +79,13 @@ public class CharacterStreamSource implements PollableSource<String> {
return new CharacterStreamSource(new InputStreamReader(System.in));
}
public static final CharacterStreamSource stdin(String charsetName) {
try {
return new CharacterStreamSource(new InputStreamReader(System.in, charsetName));
}
catch (UnsupportedEncodingException e) {
throw new ConfigurationException("unsupported encoding: " + charsetName, e);
}
}
}

View File

@@ -0,0 +1,57 @@
/*
* Copyright 2002-2008 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.adapter.stream.config;
import org.w3c.dom.Element;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.integration.adapter.stream.CharacterStreamSource;
import org.springframework.util.StringUtils;
/**
* Parser for the &lt;console-source&gt; element.
*
* @author Mark Fisher
*/
public class ConsoleSourceParser extends AbstractSingleBeanDefinitionParser {
@Override
protected Class<?> getBeanClass(Element element) {
return CharacterStreamSource.class;
}
@Override
protected boolean shouldGenerateId() {
return false;
}
@Override
protected boolean shouldGenerateIdAsFallback() {
return true;
}
@Override
protected void doParse(Element element, BeanDefinitionBuilder builder) {
builder.setFactoryMethod("stdin");
String charsetName = element.getAttribute("charset");
if (StringUtils.hasText(charsetName)) {
builder.addConstructorArgValue(charsetName);
}
}
}

View File

@@ -0,0 +1,62 @@
/*
* Copyright 2002-2008 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.adapter.stream.config;
import org.w3c.dom.Element;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser;
import org.springframework.integration.adapter.stream.CharacterStreamTargetAdapter;
import org.springframework.util.StringUtils;
/**
* Parser for the &lt;console-target&gt; element.
*
* @author Mark Fisher
*/
public class ConsoleTargetParser extends AbstractSingleBeanDefinitionParser {
@Override
protected Class<?> getBeanClass(Element element) {
return CharacterStreamTargetAdapter.class;
}
@Override
protected boolean shouldGenerateId() {
return false;
}
@Override
protected boolean shouldGenerateIdAsFallback() {
return true;
}
@Override
protected void doParse(Element element, BeanDefinitionBuilder builder) {
if ("true".equals(element.getAttribute("error"))) {
builder.setFactoryMethod("stderrAdapter");
}
else {
builder.setFactoryMethod("stdoutAdapter");
}
String charsetName = element.getAttribute("charset");
if (StringUtils.hasText(charsetName)) {
builder.addConstructorArgValue(charsetName);
}
}
}