Search in sources :

Example 96 with BeanDefinitionBuilder

use of org.springframework.beans.factory.support.BeanDefinitionBuilder in project spring-integration by spring-projects.

the class JmsMessageDrivenEndpointParser method parseMessageListener.

private String parseMessageListener(Element element, ParserContext parserContext, BeanDefinition adapterBeanDefinition) {
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(ChannelPublishingJmsMessageListener.class);
    builder.addPropertyValue("expectReply", this.expectReply);
    if (this.expectReply) {
        IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "request-channel");
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "request-timeout");
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "reply-timeout");
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-request-payload");
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-reply-payload");
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "correlation-key");
        int defaults = 0;
        if (StringUtils.hasText(element.getAttribute(DEFAULT_REPLY_DESTINATION_ATTRIB))) {
            defaults++;
        }
        if (StringUtils.hasText(element.getAttribute(DEFAULT_REPLY_QUEUE_NAME_ATTRIB))) {
            defaults++;
        }
        if (StringUtils.hasText(element.getAttribute(DEFAULT_REPLY_TOPIC_NAME_ATTRIB))) {
            defaults++;
        }
        if (defaults > 1) {
            parserContext.getReaderContext().error("At most one of '" + DEFAULT_REPLY_DESTINATION_ATTRIB + "', '" + DEFAULT_REPLY_QUEUE_NAME_ATTRIB + "', or '" + DEFAULT_REPLY_TOPIC_NAME_ATTRIB + "' may be provided.", element);
        }
        IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, DEFAULT_REPLY_DESTINATION_ATTRIB);
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, DEFAULT_REPLY_QUEUE_NAME_ATTRIB);
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, DEFAULT_REPLY_TOPIC_NAME_ATTRIB);
        IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "destination-resolver");
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, REPLY_TIME_TO_LIVE);
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, REPLY_PRIORITY);
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, REPLY_DELIVERY_PERSISTENT);
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, EXPLICIT_QOS_ENABLED_FOR_REPLIES);
        IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "reply-channel");
    } else {
        String channelName = element.getAttribute("channel");
        if (!StringUtils.hasText(channelName)) {
            channelName = IntegrationNamespaceUtils.createDirectChannel(element, parserContext);
        }
        builder.addPropertyReference("requestChannel", channelName);
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "send-timeout", "requestTimeout");
        IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-payload", "extractRequestPayload");
    }
    IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "error-channel");
    IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "message-converter");
    IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "header-mapper");
    String alias = adapterBeanNameRoot(element, parserContext, adapterBeanDefinition) + ".listener";
    BeanDefinition beanDefinition = builder.getBeanDefinition();
    String beanName = BeanDefinitionReaderUtils.generateBeanName(beanDefinition, parserContext.getRegistry());
    BeanComponentDefinition component = new BeanComponentDefinition(beanDefinition, beanName, new String[] { alias });
    parserContext.registerBeanComponent(component);
    return beanName;
}
Also used : BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder) BeanComponentDefinition(org.springframework.beans.factory.parsing.BeanComponentDefinition) AbstractBeanDefinition(org.springframework.beans.factory.support.AbstractBeanDefinition) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) JmsMessageDrivenEndpoint(org.springframework.integration.jms.JmsMessageDrivenEndpoint)

Example 97 with BeanDefinitionBuilder

use of org.springframework.beans.factory.support.BeanDefinitionBuilder in project spring-integration by spring-projects.

the class JmsOutboundChannelAdapterParser method parseConsumer.

@Override
protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) {
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(JmsSendingMessageHandler.class);
    String jmsTemplate = element.getAttribute(JmsParserUtils.JMS_TEMPLATE_ATTRIBUTE);
    String destination = element.getAttribute(JmsParserUtils.DESTINATION_ATTRIBUTE);
    String destinationName = element.getAttribute(JmsParserUtils.DESTINATION_NAME_ATTRIBUTE);
    String destinationExpression = element.getAttribute(JmsParserUtils.DESTINATION_EXPRESSION_ATTRIBUTE);
    String headerMapper = element.getAttribute(JmsParserUtils.HEADER_MAPPER_ATTRIBUTE);
    boolean hasJmsTemplate = StringUtils.hasText(jmsTemplate);
    boolean hasDestinationRef = StringUtils.hasText(destination);
    boolean hasDestinationName = StringUtils.hasText(destinationName);
    boolean hasDestinationExpression = StringUtils.hasText(destinationExpression);
    if (hasJmsTemplate) {
        JmsParserUtils.verifyNoJmsTemplateAttributes(element, parserContext);
        builder.addConstructorArgReference(jmsTemplate);
    } else {
        builder.addConstructorArgValue(JmsParserUtils.parseJmsTemplateBeanDefinition(element, parserContext));
    }
    if (hasDestinationRef || hasDestinationName || hasDestinationExpression) {
        if (!(hasDestinationRef ^ hasDestinationName ^ hasDestinationExpression)) {
            parserContext.getReaderContext().error("The 'destination', 'destination-name', and " + "'destination-expression' attributes are mutually exclusive.", parserContext.extractSource(element));
        }
        if (hasDestinationRef) {
            builder.addPropertyReference(JmsParserUtils.DESTINATION_PROPERTY, destination);
        } else if (hasDestinationName) {
            builder.addPropertyValue(JmsParserUtils.DESTINATION_NAME_PROPERTY, destinationName);
        } else if (hasDestinationExpression) {
            BeanDefinitionBuilder expressionBuilder = BeanDefinitionBuilder.genericBeanDefinition(ExpressionFactoryBean.class);
            expressionBuilder.addConstructorArgValue(destinationExpression);
            builder.addPropertyValue(JmsParserUtils.DESTINATION_EXPRESSION_PROPERTY, expressionBuilder.getBeanDefinition());
        }
    } else if (!hasJmsTemplate) {
        parserContext.getReaderContext().error("either a '" + JmsParserUtils.JMS_TEMPLATE_ATTRIBUTE + "' or one of '" + JmsParserUtils.DESTINATION_ATTRIBUTE + "', '" + JmsParserUtils.DESTINATION_NAME_ATTRIBUTE + "', or '" + JmsParserUtils.DESTINATION_EXPRESSION_ATTRIBUTE + "' attributes must be provided", parserContext.extractSource(element));
    }
    if (StringUtils.hasText(headerMapper)) {
        builder.addPropertyReference(JmsParserUtils.HEADER_MAPPER_PROPERTY, headerMapper);
    }
    IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "extract-payload");
    return builder.getBeanDefinition();
}
Also used : BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder)

Example 98 with BeanDefinitionBuilder

use of org.springframework.beans.factory.support.BeanDefinitionBuilder in project spring-integration by spring-projects.

the class OperationInvokingOutboundGatewayParser method parseHandler.

@Override
protected BeanDefinitionBuilder parseHandler(Element element, ParserContext parserContext) {
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(OperationInvokingMessageHandler.class);
    IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "server");
    IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "object-name");
    IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "operation-name");
    IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "reply-channel", "outputChannel");
    IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "requires-reply");
    return builder;
}
Also used : BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder)

Example 99 with BeanDefinitionBuilder

use of org.springframework.beans.factory.support.BeanDefinitionBuilder in project spring-integration by spring-projects.

the class NotificationListeningChannelAdapterParser method doParse.

@Override
protected AbstractBeanDefinition doParse(Element element, ParserContext parserContext, String channelName) {
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(NotificationListeningMessageProducer.class);
    builder.addPropertyReference("outputChannel", channelName);
    IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "server");
    IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "notification-filter", "filter");
    IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "handback");
    IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "send-timeout");
    IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "object-name");
    return builder.getBeanDefinition();
}
Also used : BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder)

Example 100 with BeanDefinitionBuilder

use of org.springframework.beans.factory.support.BeanDefinitionBuilder in project spring-integration by spring-projects.

the class OperationInvokingChannelAdapterParser method parseConsumer.

@Override
protected AbstractBeanDefinition parseConsumer(Element element, ParserContext parserContext) {
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(OperationInvokingMessageHandler.class);
    IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "server");
    IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "object-name");
    IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "operation-name");
    return builder.getBeanDefinition();
}
Also used : BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder)

Aggregations

BeanDefinitionBuilder (org.springframework.beans.factory.support.BeanDefinitionBuilder)524 BeanDefinition (org.springframework.beans.factory.config.BeanDefinition)116 Element (org.w3c.dom.Element)96 RootBeanDefinition (org.springframework.beans.factory.support.RootBeanDefinition)61 RuntimeBeanReference (org.springframework.beans.factory.config.RuntimeBeanReference)60 AbstractBeanDefinition (org.springframework.beans.factory.support.AbstractBeanDefinition)58 BeanMetadataElement (org.springframework.beans.BeanMetadataElement)53 BeanComponentDefinition (org.springframework.beans.factory.parsing.BeanComponentDefinition)47 ManagedList (org.springframework.beans.factory.support.ManagedList)33 ManagedMap (org.springframework.beans.factory.support.ManagedMap)26 HashMap (java.util.HashMap)19 DefaultListableBeanFactory (org.springframework.beans.factory.support.DefaultListableBeanFactory)19 Test (org.junit.jupiter.api.Test)16 BeanDefinitionHolder (org.springframework.beans.factory.config.BeanDefinitionHolder)16 BeanDefinitionRegistry (org.springframework.beans.factory.support.BeanDefinitionRegistry)12 Node (org.w3c.dom.Node)12 ArrayList (java.util.ArrayList)10 Test (org.junit.Test)10 TypedStringValue (org.springframework.beans.factory.config.TypedStringValue)10 CompositeComponentDefinition (org.springframework.beans.factory.parsing.CompositeComponentDefinition)10