private string ParseMessageListenerContainer(XmlElement element, ParserContext parserContext) { if (element.HasAttribute("container")) { foreach (string containerAttribute in containerAttributes) { if (element.HasAttribute(containerAttribute)) { parserContext.ReaderContext.ReportException(element, containerAttribute, "The '" + containerAttribute + "' attribute should not be provided when specifying a 'container' reference."); } } return(element.GetAttribute("container")); } ObjectDefinitionBuilder builder = ObjectDefinitionBuilder.GenericObjectDefinition(typeof(SimpleMessageListenerContainer)); string destinationAttribute = this.expectReply ? "request-destination" : "destination"; string destinationNameAttribute = this.expectReply ? "request-destination-name" : "destination-name"; string destination = element.GetAttribute(destinationAttribute); string destinationName = element.GetAttribute(destinationNameAttribute); if (!(StringUtils.HasText(destination) ^ StringUtils.HasText(destinationName))) { parserContext.ReaderContext.ReportException(element, "destination or destination-name", "Exactly one of '" + destinationAttribute + "' or '" + destinationNameAttribute + "' is required."); } builder.AddPropertyReference(NmsAdapterParserUtils.CONNECTION_FACTORY_PROPERTY, NmsAdapterParserUtils.DetermineConnectionFactoryBeanName(element, parserContext)); if (StringUtils.HasText(destination)) { builder.AddPropertyReference("destination", destination); } else { builder.AddPropertyValue("destinationName", destinationName); } AcknowledgementMode acknowledgementMode = NmsAdapterParserUtils.ParseAcknowledgementMode(element, parserContext); if (acknowledgementMode.Equals(AcknowledgementMode.Transactional)) { builder.AddPropertyValue("sessionTransacted", true); } else { builder.AddPropertyValue("sessionAcknowledgeMode", acknowledgementMode); } IntegrationNamespaceUtils.SetReferenceIfAttributeDefined(builder, element, "destination-resolver"); IntegrationNamespaceUtils.SetReferenceIfAttributeDefined(builder, element, "transaction-manager"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "pub-sub-domain"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "concurrent-consumers"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "max-concurrent-consumers"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "max-messages-per-task"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "idle-task-execution-limit"); builder.AddPropertyValue("autoStartup", false); return(parserContext.ReaderContext.RegisterWithGeneratedName(builder.ObjectDefinition)); }
protected override void DoParse(XmlElement element, ParserContext parserContext, ObjectDefinitionBuilder builder) { String containerBeanName = ParseMessageListenerContainer(element, parserContext); String listenerBeanName = ParseMessageListener(element, parserContext); builder.AddConstructorArgReference(containerBeanName); builder.AddConstructorArgReference(listenerBeanName); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "auto-startup"); }
protected override string ParseSource(XmlElement element, ParserContext parserContext) { ObjectDefinitionBuilder builder = ObjectDefinitionBuilder.GenericObjectDefinition(typeof(NmsDestinationPollingSource)); string nmsTemplate = element.GetAttribute(NmsAdapterParserUtils.NMS_TEMPLATE_ATTRIBUTE); string destination = element.GetAttribute(NmsAdapterParserUtils.DESTINATION_ATTRIBUTE); string destinationName = element.GetAttribute(NmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE); string headerMapper = element.GetAttribute(NmsAdapterParserUtils.HEADER_MAPPER_ATTRIBUTE); if (StringUtils.HasText(nmsTemplate)) { if (element.HasAttribute(NmsAdapterParserUtils.CONNECTION_FACTORY_ATTRIBUTE) || element.HasAttribute(NmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE) || element.HasAttribute(NmsAdapterParserUtils.DESTINATION_ATTRIBUTE)) { throw new ObjectCreationException( "When providing '" + NmsAdapterParserUtils.NMS_TEMPLATE_ATTRIBUTE + "', none of '" + NmsAdapterParserUtils.CONNECTION_FACTORY_ATTRIBUTE + "', '" + NmsAdapterParserUtils.DESTINATION_ATTRIBUTE + "', or '" + NmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE + "' should be provided."); } builder.AddConstructorArgReference(nmsTemplate); } else if (StringUtils.HasText(destination) || StringUtils.HasText(destinationName)) { builder.AddConstructorArgReference(NmsAdapterParserUtils.DetermineConnectionFactoryBeanName(element, parserContext)); if (StringUtils.HasText(destination)) { builder.AddConstructorArgReference(destination); } else if (StringUtils.HasText(destinationName)) { builder.AddConstructorArg(destinationName); } } else { throw new ObjectCreationException("either a '" + NmsAdapterParserUtils.NMS_TEMPLATE_ATTRIBUTE + "' or one of '" + NmsAdapterParserUtils.DESTINATION_ATTRIBUTE + "' or '" + NmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE + "' attributes must be provided for a polling NMS adapter"); } if (StringUtils.HasText(headerMapper)) { builder.AddPropertyReference(NmsAdapterParserUtils.HEADER_MAPPER_PROPERTY, headerMapper); } IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "extract-payload"); IntegrationNamespaceUtils.SetReferenceIfAttributeDefined(builder, element, "destination-resolver"); return(parserContext.ReaderContext.RegisterWithGeneratedName(builder.ObjectDefinition)); }
protected override AbstractObjectDefinition ParseConsumer(XmlElement element, ParserContext parserContext) { ObjectDefinitionBuilder builder = ObjectDefinitionBuilder.GenericObjectDefinition(typeof(NmsSendingMessageHandler)); string nmsTemplate = element.GetAttribute(NmsAdapterParserUtils.NMS_TEMPLATE_ATTRIBUTE); string destination = element.GetAttribute(NmsAdapterParserUtils.DESTINATION_ATTRIBUTE); string destinationName = element.GetAttribute(NmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE); string headerMapper = element.GetAttribute(NmsAdapterParserUtils.HEADER_MAPPER_ATTRIBUTE); if (StringUtils.HasText(nmsTemplate)) { if (element.HasAttribute(NmsAdapterParserUtils.CONNECTION_FACTORY_ATTRIBUTE) || element.HasAttribute(NmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE) || element.HasAttribute(NmsAdapterParserUtils.DESTINATION_ATTRIBUTE)) { throw new ObjectCreationException( "When providing '" + NmsAdapterParserUtils.NMS_TEMPLATE_ATTRIBUTE + "', none of '" + NmsAdapterParserUtils.CONNECTION_FACTORY_ATTRIBUTE + "', '" + NmsAdapterParserUtils.DESTINATION_ATTRIBUTE + "', or '" + NmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE + "' should be provided."); } builder.AddPropertyReference(NmsAdapterParserUtils.NMS_TEMPLATE_PROPERTY, nmsTemplate); } else if (StringUtils.HasText(destination) ^ StringUtils.HasText(destinationName)) { builder.AddPropertyReference(NmsAdapterParserUtils.CONNECTION_FACTORY_PROPERTY, NmsAdapterParserUtils.DetermineConnectionFactoryBeanName(element, parserContext)); if (StringUtils.HasText(destination)) { builder.AddPropertyReference(NmsAdapterParserUtils.DESTINATION_PROPERTY, destination); } else { builder.AddPropertyValue(NmsAdapterParserUtils.DESTINATION_NAME_PROPERTY, destinationName); } } else { throw new ObjectCreationException("either a '" + NmsAdapterParserUtils.NMS_TEMPLATE_ATTRIBUTE + "' or one of '" + NmsAdapterParserUtils.DESTINATION_ATTRIBUTE + "' or '" + NmsAdapterParserUtils.DESTINATION_NAME_ATTRIBUTE + "' attributes must be provided"); } if (StringUtils.HasText(headerMapper)) { builder.AddPropertyReference(NmsAdapterParserUtils.HEADER_MAPPER_PROPERTY, headerMapper); } IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "extract-payload"); return(builder.ObjectDefinition); }
private string ParseMessageListener(XmlElement element, ParserContext parserContext) { ObjectDefinitionBuilder builder = ObjectDefinitionBuilder.GenericObjectDefinition(typeof(ChannelPublishingJmsMessageListener)); 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"); 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.ReaderContext.ReportException(element, "several possible properites", "At most one of '" + DEFAULT_REPLY_DESTINATION_ATTRIB + "', '" + DEFAULT_REPLY_QUEUE_NAME_ATTRIB + "', or '" + DEFAULT_REPLY_TOPIC_NAME_ATTRIB + "' may be provided."); } 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"); } else { IntegrationNamespaceUtils.SetReferenceIfAttributeDefined(builder, element, "channel", "requestChannel"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "send-timeout", "requestTimeout"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "extract-payload", "extractRequestPayload"); } IntegrationNamespaceUtils.SetReferenceIfAttributeDefined(builder, element, "message-converter"); IntegrationNamespaceUtils.SetReferenceIfAttributeDefined(builder, element, "header-mapper"); return(parserContext.ReaderContext.RegisterWithGeneratedName(builder.ObjectDefinition)); }
protected override ObjectDefinitionBuilder ParseHandler(XmlElement element, ParserContext parserContext) { ObjectDefinitionBuilder builder = ObjectDefinitionBuilder.GenericObjectDefinition(typeof(NmsOutboundGateway)); builder.AddPropertyReference("connectionFactory", element.GetAttribute("connection-factory")); String requestDestination = element.GetAttribute("request-destination"); String requestDestinationName = element.GetAttribute("request-destination-name"); if (!(StringUtils.HasText(requestDestination) ^ StringUtils.HasText(requestDestinationName))) { parserContext.ReaderContext.ReportException(element, "request-destination or request-destination-name", "Exactly one of the 'request-destination' or 'request-destination-name' attributes is required."); } if (StringUtils.HasText(requestDestination)) { builder.AddPropertyReference("requestDestination", requestDestination); } else if (StringUtils.HasText(requestDestinationName)) { builder.AddPropertyValue("requestDestinationName", requestDestinationName); } IntegrationNamespaceUtils.SetReferenceIfAttributeDefined(builder, element, "reply-destination"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "reply-destination-name"); IntegrationNamespaceUtils.SetReferenceIfAttributeDefined(builder, element, "reply-channel"); IntegrationNamespaceUtils.SetReferenceIfAttributeDefined(builder, element, "message-converter"); IntegrationNamespaceUtils.SetReferenceIfAttributeDefined(builder, element, "header-mapper"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "extract-request-payload"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "extract-reply-payload"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "receive-timeout"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "pub-sub-domain"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "delivery-mode"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "time-to-live"); IntegrationNamespaceUtils.SetValueIfAttributeDefined(builder, element, "priority"); return(builder); }