/// <summary>The get object type.</summary> /// <param name="element">The element.</param> /// <returns>The System.Type.</returns> protected override Type GetObjectType(XmlElement element) { if (NamespaceUtils.IsAttributeDefined(element, "name")) { return(typeof(Queue)); } else { return(typeof(AnonymousQueue)); } }
/// <summary>The do parse.</summary> /// <param name="element">The element.</param> /// <param name="parserContext">The parser context.</param> /// <param name="builder">The builder.</param> protected override void DoParse(XmlElement element, ParserContext parserContext, ObjectDefinitionBuilder builder) { if (!NamespaceUtils.IsAttributeDefined(element, "name") && !NamespaceUtils.IsAttributeDefined(element, ID_ATTRIBUTE)) { parserContext.ReaderContext.ReportFatalException(element, "Queue must have either id or name (or both)"); } NamespaceUtils.AddConstructorArgValueIfAttributeDefined(builder, element, "name"); if (!NamespaceUtils.IsAttributeDefined(element, "name")) { if (this.AttributeHasIllegalOverride(element, DURABLE_ATTRIBUTE, "false") || this.AttributeHasIllegalOverride(element, EXCLUSIVE_ATTRIBUTE, "true") || this.AttributeHasIllegalOverride(element, AUTO_DELETE_ATTRIBUTE, "true")) { parserContext.ReaderContext.ReportFatalException(element, "Anonymous queue cannot specify durable='true', exclusive='false' or auto-delete='false'"); return; } } else { NamespaceUtils.AddConstructorArgBooleanValueIfAttributeDefined(builder, element, DURABLE_ATTRIBUTE, false); NamespaceUtils.AddConstructorArgBooleanValueIfAttributeDefined(builder, element, EXCLUSIVE_ATTRIBUTE, false); NamespaceUtils.AddConstructorArgBooleanValueIfAttributeDefined(builder, element, AUTO_DELETE_ATTRIBUTE, false); } var queueArguments = element.GetAttribute(ARGUMENTS); var argumentsElement = element.SelectChildElementByTagName(ARGUMENTS); if (argumentsElement != null) { var parser = new ObjectDefinitionParserHelper(parserContext); if (!string.IsNullOrWhiteSpace(queueArguments)) { parserContext.ReaderContext.ReportFatalException(element, "Queue may have either a queue-attributes attribute or element, but not both"); } var map = parser.ParseMapElement(argumentsElement, builder.RawObjectDefinition); builder.AddConstructorArg(map); } if (!string.IsNullOrWhiteSpace(queueArguments)) { builder.AddConstructorArgReference(queueArguments); } }
public override IObjectDefinition ParseElement(XmlElement element, ParserContext parserContext) { AbstractObjectDefinition definition = this.ParseInternal(element, parserContext); if (!parserContext.IsNested) { string id = null; try { id = this.ResolveId(element, definition, parserContext); if (!StringUtils.HasText(id)) { parserContext.ReaderContext.ReportException(element, "null", "Id is required for element '" + element.LocalName + "' when used as a top-level tag", null); } string[] name = new string[0]; if (NamespaceUtils.IsAttributeDefined(element, "name")) { name = new[] { GetAttributeValue(element, "name") }; } ObjectDefinitionHolder holder; if (name.Length == 0) { holder = new ObjectDefinitionHolder(definition, id); } else { holder = new ObjectDefinitionHolder(definition, id, name); } this.RegisterObjectDefinition(holder, parserContext.Registry); } catch (ObjectDefinitionStoreException ex) { parserContext.ReaderContext.ReportException(element, id, ex.Message); return(null); } } return(definition); }
private void ParseListener(XmlElement listenerEle, XmlElement containerEle, ParserContext parserContext) { var listenerDef = new RootObjectDefinition(); // listenerDef.setSource(parserContext.extractSource(listenerEle)); var aRef = listenerEle.GetAttribute(REF_ATTRIBUTE); if (string.IsNullOrWhiteSpace(aRef)) { parserContext.ReaderContext.ReportFatalException(listenerEle, "Listener 'ref' attribute contains empty value."); } else { listenerDef.PropertyValues.Add("HandlerObject", new RuntimeObjectReference(aRef)); } string method = null; if (listenerEle.HasAttribute(METHOD_ATTRIBUTE)) { method = listenerEle.GetAttribute(METHOD_ATTRIBUTE); if (string.IsNullOrWhiteSpace(method)) { parserContext.ReaderContext.ReportFatalException(listenerEle, "Listener 'method' attribute contains empty value."); } } listenerDef.PropertyValues.Add("DefaultListenerMethod", method); if (containerEle.HasAttribute(MESSAGE_CONVERTER_ATTRIBUTE)) { var messageConverter = containerEle.GetAttribute(MESSAGE_CONVERTER_ATTRIBUTE); if (string.IsNullOrWhiteSpace(messageConverter)) { parserContext.ReaderContext.ReportFatalException(containerEle, "Listener container 'message-converter' attribute contains empty value."); } else { listenerDef.PropertyValues.Add("MessageConverter", new RuntimeObjectReference(messageConverter)); } } var containerDef = RabbitNamespaceUtils.ParseContainer(containerEle, parserContext); if (listenerEle.HasAttribute(RESPONSE_EXCHANGE_ATTRIBUTE)) { var responseExchange = listenerEle.GetAttribute(RESPONSE_EXCHANGE_ATTRIBUTE); listenerDef.PropertyValues.Add("ResponseExchange", responseExchange); } if (listenerEle.HasAttribute(RESPONSE_ROUTING_KEY_ATTRIBUTE)) { var responseRoutingKey = listenerEle.GetAttribute(RESPONSE_ROUTING_KEY_ATTRIBUTE); listenerDef.PropertyValues.Add("ResponseRoutingKey", responseRoutingKey); } listenerDef.ObjectTypeName = "Spring.Messaging.Amqp.Rabbit.Listener.Adapter.MessageListenerAdapter"; containerDef.PropertyValues.Add("MessageListener", listenerDef); var containerObjectName = containerEle.GetAttribute(ID_ATTRIBUTE); // If no object id is given auto generate one using the ReaderContext's ObjectNameGenerator if (string.IsNullOrWhiteSpace(containerObjectName)) { containerObjectName = parserContext.ReaderContext.GenerateObjectName(containerDef); } if (!NamespaceUtils.IsAttributeDefined(listenerEle, QUEUE_NAMES_ATTRIBUTE) && !NamespaceUtils.IsAttributeDefined(listenerEle, QUEUES_ATTRIBUTE)) { parserContext.ReaderContext.ReportFatalException(listenerEle, "Listener 'queue-names' or 'queues' attribute must be provided."); } if (NamespaceUtils.IsAttributeDefined(listenerEle, QUEUE_NAMES_ATTRIBUTE) && NamespaceUtils.IsAttributeDefined(listenerEle, QUEUES_ATTRIBUTE)) { parserContext.ReaderContext.ReportFatalException(listenerEle, "Listener 'queue-names' or 'queues' attribute must be provided but not both."); } var queueNames = listenerEle.GetAttribute(QUEUE_NAMES_ATTRIBUTE); if (!string.IsNullOrWhiteSpace(queueNames)) { var names = StringUtils.CommaDelimitedListToStringArray(queueNames); var values = new ManagedList(); foreach (var name in names) { values.Add(new TypedStringValue(name.Trim())); } containerDef.PropertyValues.Add("QueueNames", values); } var queues = listenerEle.GetAttribute(QUEUES_ATTRIBUTE); if (!string.IsNullOrWhiteSpace(queues)) { var names = StringUtils.CommaDelimitedListToStringArray(queues); var values = new ManagedList(); foreach (var name in names) { values.Add(new RuntimeObjectReference(name.Trim())); } containerDef.PropertyValues.Add("Queues", values); } // Register the listener and fire event parserContext.Registry.RegisterObjectDefinition(containerObjectName, containerDef); }