List of usage examples for org.springframework.integration.config.xml IntegrationNamespaceUtils setReferenceIfAttributeDefined
public static void setReferenceIfAttributeDefined(BeanDefinitionBuilder builder, Element element, String attributeName)
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); }