Minimizing class loading in parsers and using the parser context error handling capabilities rather than throwing Exceptions or using assertions. This facilitates proper tooling support (INT-114).

This commit is contained in:
Mark Fisher
2008-12-11 19:18:40 +00:00
parent 20f9cbff65
commit c296b1af1b
5 changed files with 34 additions and 30 deletions

View File

@@ -23,7 +23,6 @@ import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.integration.config.xml.AbstractConsumerEndpointParser;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
/**
@@ -33,7 +32,7 @@ import org.springframework.util.StringUtils;
*/
public abstract class AbstractRemotingOutboundGatewayParser extends AbstractConsumerEndpointParser {
protected abstract Class<?> getGatewayClass(Element element);
protected abstract String getGatewayClassName(Element element);
@Override
protected String getInputChannelAttributeName() {
@@ -55,27 +54,29 @@ public abstract class AbstractRemotingOutboundGatewayParser extends AbstractCons
@Override
protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) {
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(this.getGatewayClass(element));
String url = this.parseUrl(element);
BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(this.getGatewayClassName(element));
String url = this.parseUrl(element, parserContext);
builder.addConstructorArgValue(url);
String replyChannel = element.getAttribute("reply-channel");
if (StringUtils.hasText(replyChannel)) {
builder.addPropertyReference("replyChannel", replyChannel);
}
this.postProcessGateway(builder, element);
this.postProcessGateway(builder, element, parserContext);
return builder;
}
protected String parseUrl(Element element) {
protected String parseUrl(Element element, ParserContext parserContext) {
String url = element.getAttribute("url");
Assert.hasText(url, "The 'url' attribute is required.");
if (!StringUtils.hasText(url)) {
parserContext.getReaderContext().error("The 'url' attribute is required.", element);
}
return url;
}
/**
* Subclasses may override this method for additional configuration.
*/
protected void postProcessGateway(BeanDefinitionBuilder builder, Element element) {
protected void postProcessGateway(BeanDefinitionBuilder builder, Element element, ParserContext parserContext) {
}
}