Example usage for org.springframework.integration.config.xml IntegrationNamespaceUtils setReferenceIfAttributeDefined

List of usage examples for org.springframework.integration.config.xml IntegrationNamespaceUtils setReferenceIfAttributeDefined

Introduction

In this page you can find the example usage for org.springframework.integration.config.xml IntegrationNamespaceUtils setReferenceIfAttributeDefined.

Prototype

public static void setReferenceIfAttributeDefined(BeanDefinitionBuilder builder, Element element,
        String attributeName) 

Source Link

Document

Configures the provided bean definition builder with a property reference to a bean.

Usage

From source file:org.springframework.integration.aws.sqs.config.AmazonSQSInboundChannelAdapterParser.java

@Override
protected BeanMetadataElement parseSource(Element element, ParserContext parserContext) {
    String awsCredentials = registerAmazonWSCredentials(element, parserContext);
    //Mandated at xsd level, so has to be present
    String sqsQueue = element.getAttribute(SQS_QUEUE);
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(AmazonSQSMessageSource.class)
            .addConstructorArgReference(awsCredentials).addConstructorArgValue(sqsQueue);
    IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, IS_TRANSACTIONAL);
    IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, MAX_REDELIVERY_ATTEMPTS);
    IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, SQS_OPERATIONS);
    String messageTransformerRef = element.getAttribute(MESSAGE_TRANSFORMER);
    boolean hasMessageTransformerRef = StringUtils.hasText(messageTransformerRef);

    boolean hasSnsHeaderPrefix = false;
    String snsNotificationAttribute = element.getAttribute(CHECK_SNS_NOTIFICATION);
    boolean checkSnsNotification = StringUtils.hasText(snsNotificationAttribute);
    String snsHeaderPrefix = null;
    if (checkSnsNotification) {
        snsHeaderPrefix = element.getAttribute(SNS_HEADER_PREFIX);
        hasSnsHeaderPrefix = StringUtils.hasText(snsHeaderPrefix);
    }//from   w w w  . j  a v a 2 s .c  o m

    if (!element.hasAttribute(SQS_OPERATIONS)) {
        BeanDefinitionBuilder sqsOperationsBuilder = BeanDefinitionBuilder
                .genericBeanDefinition(AmazonSQSOperationsImpl.class)
                .addConstructorArgReference(awsCredentials);
        if (hasMessageTransformerRef) {
            sqsOperationsBuilder.addPropertyReference("messageTransformer", messageTransformerRef);
        }

        if (checkSnsNotification) {
            sqsOperationsBuilder.addPropertyValue("checkSnsNotification", true);
            if (hasSnsHeaderPrefix) {
                sqsOperationsBuilder.addPropertyValue("snsHeaderPrefix", snsHeaderPrefix);
            }
        }

        //sqs_operations attribute not defined, register the default one
        String operationsBean = BeanDefinitionReaderUtils.registerWithGeneratedName(
                sqsOperationsBuilder.getBeanDefinition(), parserContext.getRegistry());
        builder.addPropertyReference("sqsOperations", operationsBean);
    } else {
        if (hasMessageTransformerRef) {
            //This means, we have a reference to both sqs operations and message transformer provided
            throw new BeanDefinitionStoreException(
                    "Both the attributes,  \"sqs-operations\" and \"message-transformer\" are "
                            + "not supported together. Consider injecting the messageTransformer in the sqsOperation's bean definition"
                            + " and provide \"sqs-operations\" attribute only");
        }
        if (checkSnsNotification) {
            logger.warn("check-sns-notification and sns-header-prefix attributes are supported"
                    + " only when default implementation of sqs operations is used");
        }

    }
    return builder.getBeanDefinition();
}

From source file:org.springframework.integration.kafka.config.xml.KafkaProducerContextParser.java

private void parseProducerConfigurations(Element topics, ParserContext parserContext,
        BeanDefinitionBuilder builder, Element parentElem) {
    Map<String, BeanMetadataElement> producerConfigurationsMap = new ManagedMap<String, BeanMetadataElement>();

    for (Element producerConfiguration : DomUtils.getChildElementsByTagName(topics, "producer-configuration")) {

        BeanDefinitionBuilder producerMetadataBuilder = BeanDefinitionBuilder
                .genericBeanDefinition(ProducerMetadata.class);
        producerMetadataBuilder.addConstructorArgValue(producerConfiguration.getAttribute("topic"));
        producerMetadataBuilder.addConstructorArgValue(producerConfiguration.getAttribute("key-class-type"));
        producerMetadataBuilder.addConstructorArgValue(producerConfiguration.getAttribute("value-class-type"));

        String keySerializer = producerConfiguration.getAttribute("key-serializer");
        String keyEncoder = producerConfiguration.getAttribute("key-encoder");
        Assert.isTrue((StringUtils.hasText(keySerializer) ^ StringUtils.hasText(keyEncoder)),
                "Exactly one of 'key-serializer' or 'key-encoder' must be specified");
        if (StringUtils.hasText(keyEncoder)) {
            if (log.isWarnEnabled()) {
                log.warn("'key-encoder' is a deprecated option, use 'key-serializer' instead.");
            }//from w ww. ja  va2s  .com
            BeanDefinitionBuilder encoderAdaptingSerializerBean = BeanDefinitionBuilder
                    .genericBeanDefinition(EncoderAdaptingSerializer.class);
            encoderAdaptingSerializerBean.addConstructorArgReference(keyEncoder);
            producerMetadataBuilder.addConstructorArgValue(encoderAdaptingSerializerBean.getBeanDefinition());
        } else {
            producerMetadataBuilder.addConstructorArgReference(keySerializer);
        }

        String valueSerializer = producerConfiguration.getAttribute("value-serializer");
        String valueEncoder = producerConfiguration.getAttribute("value-encoder");
        Assert.isTrue((StringUtils.hasText(valueSerializer) ^ StringUtils.hasText(valueEncoder)),
                "Exactly one of 'value-serializer' or 'value-encoder' must be specified");
        if (StringUtils.hasText(valueEncoder)) {
            if (log.isWarnEnabled()) {
                log.warn("'value-encoder' is a deprecated option, use 'value-serializer' instead.");
            }
            BeanDefinitionBuilder encoderAdaptingSerializerBean = BeanDefinitionBuilder
                    .genericBeanDefinition(EncoderAdaptingSerializer.class);
            encoderAdaptingSerializerBean.addConstructorArgReference(valueEncoder);
            producerMetadataBuilder.addConstructorArgValue(encoderAdaptingSerializerBean.getBeanDefinition());
        } else {
            producerMetadataBuilder.addConstructorArgReference(valueSerializer);
        }

        IntegrationNamespaceUtils.setReferenceIfAttributeDefined(producerMetadataBuilder, producerConfiguration,
                "partitioner");
        if (StringUtils.hasText(producerConfiguration.getAttribute("partitioner"))) {
            if (log.isWarnEnabled()) {
                log.warn("'partitioner' is a deprecated option. Use the 'kafka_partitionId' message header or "
                        + "the partition argument in the send() or convertAndSend() methods");
            }
        }
        IntegrationNamespaceUtils.setValueIfAttributeDefined(producerMetadataBuilder, producerConfiguration,
                "compression-type");
        IntegrationNamespaceUtils.setValueIfAttributeDefined(producerMetadataBuilder, producerConfiguration,
                "batch-bytes");
        AbstractBeanDefinition producerMetadataBeanDefinition = producerMetadataBuilder.getBeanDefinition();

        String producerPropertiesBean = parentElem.getAttribute("producer-properties");

        BeanDefinitionBuilder producerFactoryBuilder = BeanDefinitionBuilder
                .genericBeanDefinition(ProducerFactoryBean.class);
        producerFactoryBuilder.addConstructorArgValue(producerMetadataBeanDefinition);

        final String brokerList = producerConfiguration.getAttribute("broker-list");
        if (StringUtils.hasText(brokerList)) {
            producerFactoryBuilder.addConstructorArgValue(producerConfiguration.getAttribute("broker-list"));
        }

        if (StringUtils.hasText(producerPropertiesBean)) {
            producerFactoryBuilder.addConstructorArgReference(producerPropertiesBean);
        }

        AbstractBeanDefinition producerFactoryBeanDefinition = producerFactoryBuilder.getBeanDefinition();

        BeanDefinitionBuilder producerConfigurationBuilder = BeanDefinitionBuilder
                .genericBeanDefinition(ProducerConfiguration.class)
                .addConstructorArgValue(producerMetadataBeanDefinition)
                .addConstructorArgValue(producerFactoryBeanDefinition);
        IntegrationNamespaceUtils.setReferenceIfAttributeDefined(producerConfigurationBuilder,
                producerConfiguration, "conversion-service");
        producerConfigurationsMap.put(producerConfiguration.getAttribute("topic"),
                producerConfigurationBuilder.getBeanDefinition());
    }

    builder.addPropertyValue("producerConfigurations", producerConfigurationsMap);
}