You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flex.apache.org by cd...@apache.org on 2014/05/05 22:08:28 UTC
[14/51] [partial] FLEX-34306 - [BlazeDS] Make the BlazeDS build run
on Windows machines - Added some mkdir commands to the ANT Build.java - Did
some fine-tuning to resolve some compile errors
http://git-wip-us.apache.org/repos/asf/flex-blazeds/blob/4f6a3052/modules/core/src/flex/messaging/config/ServerConfigurationParser.java
----------------------------------------------------------------------
diff --git a/modules/core/src/flex/messaging/config/ServerConfigurationParser.java b/modules/core/src/flex/messaging/config/ServerConfigurationParser.java
old mode 100755
new mode 100644
index d71abb4..128b115
--- a/modules/core/src/flex/messaging/config/ServerConfigurationParser.java
+++ b/modules/core/src/flex/messaging/config/ServerConfigurationParser.java
@@ -1,1921 +1,1921 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package flex.messaging.config;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.StringTokenizer;
-
-import flex.messaging.config.ThrottleSettings.Policy;
-import flex.messaging.util.LocaleUtils;
-
-/**
- * Processes DOM representation of a messaging configuration file.
- * <p>
- * Note: Since reference ids are used between elements, certain
- * sections of the document need to be parsed first.
- * </p>
- *
- * @author Peter Farland
- * @exclude
- */
-public abstract class ServerConfigurationParser extends AbstractConfigurationParser
-{
- /**
- * Used to verify that advanced messaging support has been registered if necessary.
- * If other configuration requires it, but it was not registered a ConfigurationException is thrown.
- */
- private boolean verifyAdvancedMessagingSupport = false;
- private boolean advancedMessagingSupportRegistered = false;
-
- @Override
- protected void parseTopLevelConfig(Document doc)
- {
- Node root = selectSingleNode(doc, "/" + SERVICES_CONFIG_ELEMENT);
-
- if (root != null)
- {
- allowedChildElements(root, SERVICES_CONFIG_CHILDREN);
-
- securitySection(root); // Parse security before channels.
-
- serversSection(root);
-
- channelsSection(root);
-
- services(root);
-
- clusters(root);
-
- logging(root);
-
- system(root);
-
- flexClient(root);
-
- factories(root);
-
- messageFilters(root);
-
- validators(root);
-
- // Validate that any dependencies on advanced messaging support can be satisified at runtime.
- if (verifyAdvancedMessagingSupport && !advancedMessagingSupportRegistered)
- {
- ConfigurationException e = new ConfigurationException();
- e.setMessage(REQUIRE_ADVANCED_MESSAGING_SUPPORT);
- throw e;
- }
- }
- else
- {
- // The services configuration root element must be '{SERVICES_CONFIG_ELEMENT}'.
- ConfigurationException e = new ConfigurationException();
- e.setMessage(INVALID_SERVICES_ROOT, new Object[]{SERVICES_CONFIG_ELEMENT});
- throw e;
- }
- }
-
- private void clusters(Node root)
- {
- Node clusteringNode = selectSingleNode(root, CLUSTERS_ELEMENT);
- if (clusteringNode != null)
- {
- allowedAttributesOrElements(clusteringNode, CLUSTERING_CHILDREN);
-
- NodeList clusters = selectNodeList(clusteringNode, CLUSTER_DEFINITION_ELEMENT);
- for (int i = 0; i < clusters.getLength(); i++)
- {
- Node cluster = clusters.item(i);
- requiredAttributesOrElements(cluster, CLUSTER_DEFINITION_CHILDREN);
- String clusterName = getAttributeOrChildElement(cluster, ID_ATTR);
- if (!isValidID(clusterName))
- continue;
-
- String propsFileName = getAttributeOrChildElement(cluster, CLUSTER_PROPERTIES_ATTR);
- ClusterSettings clusterSettings = new ClusterSettings();
- clusterSettings.setClusterName(clusterName);
- clusterSettings.setPropsFileName(propsFileName);
- String className = getAttributeOrChildElement(cluster, CLASS_ATTR);
- if (className != null && className.length() > 0)
- clusterSettings.setImplementationClass(className);
-
- String defaultValue = getAttributeOrChildElement(cluster, ClusterSettings.DEFAULT_ELEMENT);
- if (defaultValue != null && defaultValue.length() > 0)
- {
- if (defaultValue.equalsIgnoreCase(TRUE_STRING))
- clusterSettings.setDefault(true);
- else if (!defaultValue.equalsIgnoreCase(FALSE_STRING))
- {
- ConfigurationException e = new ConfigurationException();
- e.setMessage(10215, new Object[] {clusterName, defaultValue});
- throw e;
- }
- }
- String ulb = getAttributeOrChildElement(cluster, ClusterSettings.URL_LOAD_BALANCING);
- if (ulb != null && ulb.length() > 0)
- {
- if (ulb.equalsIgnoreCase(FALSE_STRING))
- {
- clusterSettings.setURLLoadBalancing(false);
- }
- else if (!ulb.equalsIgnoreCase(TRUE_STRING))
- {
- ConfigurationException e = new ConfigurationException();
- e.setMessage(10216, new Object[] {clusterName, ulb});
- throw e;
- }
- }
-
- NodeList properties = selectNodeList(cluster, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(cluster));
- clusterSettings.addProperties(map);
- }
-
- ((MessagingConfiguration)config).addClusterSettings(clusterSettings);
-
- }
- }
- }
-
-
- private void securitySection(Node root)
- {
- Node security = selectSingleNode(root, SECURITY_ELEMENT);
-
- if (security == null)
- return;
-
- allowedChildElements(security, SECURITY_CHILDREN);
-
- NodeList list = selectNodeList(security, SECURITY_CONSTRAINT_DEFINITION_ELEMENT);
- for (int i = 0; i < list.getLength(); i++)
- {
- Node constraint = list.item(i);
- securityConstraint(constraint, false);
- }
-
- list = selectNodeList(security, CONSTRAINT_INCLUDE_ELEMENT);
- for (int i = 0; i < list.getLength(); i++)
- {
- Node include = list.item(i);
- securityConstraintInclude(include);
- }
-
- list = selectNodeList(security, LOGIN_COMMAND_ELEMENT);
- for (int i = 0; i < list.getLength(); i++)
- {
- Node login = list.item(i);
- LoginCommandSettings loginCommandSettings= new LoginCommandSettings();
- requiredAttributesOrElements(login, LOGIN_COMMAND_REQ_CHILDREN);
- allowedAttributesOrElements(login, LOGIN_COMMAND_CHILDREN);
-
- String server = getAttributeOrChildElement(login, SERVER_ATTR);
- if (server.length() == 0)
- {
- // Attribute '{SERVER_ATTR}' must be specified for element '{LOGIN_COMMAND_ELEMENT}'
- ConfigurationException e = new ConfigurationException();
- e.setMessage(MISSING_ATTRIBUTE, new Object[]{SERVER_ATTR, LOGIN_COMMAND_ELEMENT});
- throw e;
- }
- loginCommandSettings.setServer(server);
-
- String loginClass = getAttributeOrChildElement(login, CLASS_ATTR);
- if (loginClass.length() == 0)
- {
- // Attribute '{CLASS_ATTR}' must be specified for element '{LOGIN_COMMAND_ELEMENT}'
- ConfigurationException e = new ConfigurationException();
- e.setMessage(MISSING_ATTRIBUTE, new Object[]{CLASS_ATTR, LOGIN_COMMAND_ELEMENT});
- throw e;
- }
- loginCommandSettings.setClassName(loginClass);
-
- boolean isPerClientAuth = Boolean.valueOf(getAttributeOrChildElement(login, PER_CLIENT_AUTH));
- loginCommandSettings.setPerClientAuthentication(isPerClientAuth);
-
- ((MessagingConfiguration)config).getSecuritySettings().addLoginCommandSettings(loginCommandSettings);
- }
-
- boolean recreateHttpSessionAfterLogin = Boolean.valueOf(getAttributeOrChildElement(security, RECREATE_HTTPSESSION_AFTER_LOGIN_ELEMENT));
- ((MessagingConfiguration)config).getSecuritySettings().setRecreateHttpSessionAfterLogin(recreateHttpSessionAfterLogin);
- }
-
- private SecurityConstraint securityConstraint(Node constraint, boolean inline)
- {
- SecurityConstraint sc;
-
- // Validation
- allowedAttributesOrElements(constraint, SECURITY_CONSTRAINT_DEFINITION_CHILDREN);
-
- // Constraint by reference
- String ref = getAttributeOrChildElement(constraint, REF_ATTR);
- if (ref.length() > 0)
- {
- allowedAttributesOrElements(constraint, new String[] {REF_ATTR});
-
- sc = ((MessagingConfiguration)config).getSecuritySettings().getConstraint(ref);
- if (sc == null)
- {
- // {SECURITY_CONSTRAINT_DEFINITION_ELEMENT} not found for reference '{ref}'.
- ConfigurationException e = new ConfigurationException();
- e.setMessage(REF_NOT_FOUND, new Object[]{SECURITY_CONSTRAINT_DEFINITION_ELEMENT, ref});
- throw e;
- }
- }
- else
- {
- // New security constraint
- String id = getAttributeOrChildElement(constraint, ID_ATTR);
-
- // If not inline, we must have a valid id to register the constraint!
- if (inline)
- {
- sc = new SecurityConstraint("");
- }
- else if (isValidID(id))
- {
- sc = new SecurityConstraint(id);
- ((MessagingConfiguration)config).getSecuritySettings().addConstraint(sc);
- }
- else
- {
- //Invalid {SECURITY_CONSTRAINT_DEFINITION_ELEMENT} id '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_ID, new Object[]{SECURITY_CONSTRAINT_DEFINITION_ELEMENT, id});
- ex.setDetails(INVALID_ID);
- throw ex;
- }
-
- // Authentication Method
- String method = getAttributeOrChildElement(constraint, AUTH_METHOD_ELEMENT);
- sc.setMethod(method);
-
- // Roles
- Node rolesNode = selectSingleNode(constraint, ROLES_ELEMENT);
- if (rolesNode != null)
- {
- allowedChildElements(rolesNode, ROLES_CHILDREN);
- NodeList roles = selectNodeList(rolesNode, ROLE_ELEMENT);
- for (int r = 0; r < roles.getLength(); r++)
- {
- Node roleNode = roles.item(r);
- String role = evaluateExpression(roleNode, ".").toString().trim();
- if (role.length() > 0)
- {
- sc.addRole(role);
- }
- }
- }
- }
-
- return sc;
- }
-
- private void securityConstraintInclude(Node constraintInclude)
- {
- // Validation
- allowedAttributesOrElements(constraintInclude, CONSTRAINT_INCLUDE_CHILDREN);
-
- String src = getAttributeOrChildElement(constraintInclude, SRC_ATTR);
- String dir = getAttributeOrChildElement(constraintInclude, DIRECTORY_ATTR);
- if (src.length() > 0)
- {
- constraintIncludeFile(src);
- }
- else if (dir.length() > 0)
- {
- constraintIncludeDirectory(dir);
- }
- else
- {
- // The include element ''{0}'' must specify either the ''{1}'' or ''{2}'' attribute.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(MISSING_INCLUDE_ATTRIBUTES, new Object[]{constraintInclude.getNodeName(), SRC_ATTR, DIRECTORY_ATTR});
- throw ex;
- }
- }
-
- private void constraintIncludeFile(String src)
- {
- Document doc = loadDocument(src, fileResolver.getIncludedFile(src));
- doc.getDocumentElement().normalize();
-
- // Check for <security-constraints> wrapping more than one definition
- Node servicesNode = selectSingleNode(doc, SECURITY_CONSTRAINTS_ELEMENT);
- if (servicesNode != null)
- {
- allowedChildElements(servicesNode, SECURITY_CONSTRAINTS_CHILDREN);
- NodeList constraints = selectNodeList(servicesNode, SECURITY_CONSTRAINT_ELEMENT);
- for (int a = 0; a < constraints.getLength(); a++)
- {
- Node constraint = constraints.item(a);
- securityConstraint(constraint, false);
- }
- fileResolver.popIncludedFile();
- }
- else // Check for single <security-constraint>
- {
- Node constraint = selectSingleNode(doc, "/" + SECURITY_CONSTRAINT_ELEMENT);
- if (constraint != null)
- {
- securityConstraint(constraint, false);
- fileResolver.popIncludedFile();
- }
- else
- {
- // The {0} root element in file {1} must be ''{2}'' or ''{3}''.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_INCLUDE_ROOT, new Object[]{CONSTRAINT_INCLUDE_ELEMENT, src, SECURITY_CONSTRAINTS_ELEMENT, SECURITY_CONSTRAINT_ELEMENT});
- throw ex;
- }
- }
- }
-
- private void constraintIncludeDirectory(String dir)
- {
- List files = fileResolver.getFiles(dir);
- for (int i = 0; i < files.size(); i++)
- {
- String src = (String) files.get(i);
- constraintIncludeFile(src);
- }
- }
-
- private void serversSection(Node root)
- {
- // Only MessagingConfiguration supports the servers element configuration.
- // The general ServicesConfiguration interface does not.
- if (!(config instanceof MessagingConfiguration))
- return;
-
- Node serversNode = selectSingleNode(root, SERVERS_ELEMENT);
- if (serversNode != null)
- {
- // Validation
- allowedAttributesOrElements(serversNode, SERVERS_CHILDREN);
-
- NodeList servers = selectNodeList(serversNode, SERVER_ELEMENT);
- for (int i = 0; i < servers.getLength(); i++)
- {
- Node server = servers.item(i);
- serverDefinition(server);
- }
- }
- }
-
- private void serverDefinition(Node server)
- {
- // Validation
- requiredAttributesOrElements(server, SERVER_REQ_CHILDREN);
- allowedAttributesOrElements(server, SERVER_CHILDREN);
-
- String id = getAttributeOrChildElement(server, ID_ATTR);
- if (isValidID(id))
- {
- SharedServerSettings settings = new SharedServerSettings();
- settings.setId(id);
- settings.setSourceFile(getSourceFileOf(server));
- String className = getAttributeOrChildElement(server, CLASS_ATTR);
- if (className.length() > 0)
- {
- settings.setClassName(className);
- // Custom server properties.
- NodeList properties = selectNodeList(server, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(server));
- settings.addProperties(map);
- }
- ((MessagingConfiguration)config).addSharedServerSettings(settings);
- }
- else
- {
- // Class not specified for {MESSAGE_FILTER_ELEMENT} '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(CLASS_NOT_SPECIFIED, new Object[]{SERVER_ELEMENT, id});
- throw ex;
- }
- }
- }
-
- private void channelsSection(Node root)
- {
- Node channelsNode = selectSingleNode(root, CHANNELS_ELEMENT);
- if (channelsNode != null)
- {
- // Validation
- allowedAttributesOrElements(channelsNode, CHANNELS_CHILDREN);
-
- NodeList channels = selectNodeList(channelsNode, CHANNEL_DEFINITION_ELEMENT);
- for (int i = 0; i < channels.getLength(); i++)
- {
- Node channel = channels.item(i);
- channelDefinition(channel);
- }
-
- NodeList includes = selectNodeList(channelsNode, CHANNEL_INCLUDE_ELEMENT);
- for (int i = 0; i < includes.getLength(); i++)
- {
- Node include = includes.item(i);
- channelInclude(include);
- }
- }
- }
-
- private void channelDefinition(Node channel)
- {
- // Validation
- requiredAttributesOrElements(channel, CHANNEL_DEFINITION_REQ_CHILDREN);
- allowedAttributesOrElements(channel, CHANNEL_DEFINITION_CHILDREN);
-
- String id = getAttributeOrChildElement(channel, ID_ATTR);
- if (isValidID(id))
- {
- // Don't allow multiple channels with the same id
- if (config.getChannelSettings(id) != null)
- {
- // Cannot have multiple channels with the same id ''{0}''.
- ConfigurationException e = new ConfigurationException();
- e.setMessage(DUPLICATE_CHANNEL_ERROR, new Object[]{id});
- throw e;
- }
-
- ChannelSettings channelSettings = new ChannelSettings(id);
- channelSettings.setSourceFile(getSourceFileOf(channel));
-
- // Note whether the channel-definition was for a remote endpoint
- String remote = getAttributeOrChildElement(channel, REMOTE_ATTR);
- channelSettings.setRemote(Boolean.valueOf(remote));
-
- // Endpoint
- Node endpoint = selectSingleNode(channel, ENDPOINT_ELEMENT);
- if (endpoint != null)
- {
- // Endpoint Validation
- allowedAttributesOrElements(endpoint, ENDPOINT_CHILDREN);
-
- String type = getAttributeOrChildElement(endpoint, CLASS_ATTR);
- channelSettings.setEndpointType(type);
-
- // The url attribute may also be specified by the deprecated uri attribute
- String uri = getAttributeOrChildElement(endpoint, URL_ATTR);
- if (uri == null || EMPTY_STRING.equals(uri))
- uri = getAttributeOrChildElement(endpoint, URI_ATTR);
- channelSettings.setUri(uri);
-
- config.addChannelSettings(id, channelSettings);
- }
-
- channelServerOnlyAttribute(channel, channelSettings);
-
- // Server reference
- Node server = selectSingleNode(channel, SERVER_ELEMENT);
- if (server != null)
- {
- requiredAttributesOrElements(server, CHANNEL_DEFINITION_SERVER_REQ_CHILDREN);
-
- String serverId = getAttributeOrChildElement(server, REF_ATTR);
- channelSettings.setServerId(serverId);
- }
-
- // Channel Properties
- NodeList properties = selectNodeList(channel, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(channel));
- channelSettings.addProperties(map);
-
- // Sniff for adaptive-frequency under flex-client-queue-processor hich requires advanced messaging support.
- if (!verifyAdvancedMessagingSupport)
- {
- ConfigMap outboundQueueProcessor = map.getPropertyAsMap(FLEX_CLIENT_OUTBOUND_QUEUE_PROCESSOR_ELEMENT, null);
- if (outboundQueueProcessor != null)
- {
- // Flex client queue processor properties
- ConfigMap queueProcessorProperties = outboundQueueProcessor.getPropertyAsMap(PROPERTIES_ELEMENT, null);
- if (queueProcessorProperties != null)
- {
- // Sniff for adaptive-frequency which requires advanced messaging support.
- boolean adaptiveFrequency = queueProcessorProperties.getPropertyAsBoolean(ADAPTIVE_FREQUENCY, false);
- if (adaptiveFrequency)
- verifyAdvancedMessagingSupport = true;
- }
- }
- }
- }
-
- // Channel Security
-
- // Security-constraint short-cut attribute
- String ref = evaluateExpression(channel, "@" + SECURITY_CONSTRAINT_ATTR).toString().trim();
- if (ref.length() > 0)
- {
- SecurityConstraint sc = ((MessagingConfiguration)config).getSecuritySettings().getConstraint(ref);
- if (sc != null)
- {
- channelSettings.setConstraint(sc);
- }
- else
- {
- // {SECURITY_CONSTRAINT_ELEMENT} not found for reference '{ref}' in channel '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(REF_NOT_FOUND_IN_CHANNEL, new Object[]{SECURITY_CONSTRAINT_ATTR, ref, id});
- throw ex;
- }
- }
- else
- {
- // Inline security element
- Node security = selectSingleNode(channel, SECURITY_ELEMENT);
- if (security != null)
- {
- allowedChildElements(security, EMBEDDED_SECURITY_CHILDREN);
- Node constraint = selectSingleNode(security, SECURITY_CONSTRAINT_ELEMENT);
- if (constraint != null)
- {
- SecurityConstraint sc = securityConstraint(constraint, true);
- channelSettings.setConstraint(sc);
- }
- }
- }
- }
- else
- {
- // Invalid {CHANNEL_DEFINITION_ELEMENT} id '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_ID, new Object[]{CHANNEL_DEFINITION_ELEMENT, id});
- ex.setDetails(INVALID_ID);
- throw ex;
- }
- }
-
- private void channelServerOnlyAttribute(Node channel, ChannelSettings channelSettings)
- {
- String clientType = getAttributeOrChildElement(channel, CLASS_ATTR);
- clientType = clientType.length() > 0? clientType : null;
-
- String serverOnlyString = getAttributeOrChildElement(channel, SERVER_ONLY_ATTR);
- boolean serverOnly = serverOnlyString.length() > 0? Boolean.valueOf(serverOnlyString) : false;
-
- if (clientType == null && !serverOnly) // None set.
- {
- String url = channelSettings.getUri();
- boolean serverOnlyProtocol = (url.startsWith("samfsocket") || url.startsWith("amfsocket") || url.startsWith("ws"));
- if (!serverOnlyProtocol)
- {
- // Endpoint ''{0}'' needs to have either class or server-only attribute defined.
- ConfigurationException ce = new ConfigurationException();
- ce.setMessage(CLASS_OR_SERVER_ONLY_ERROR, new Object[]{channelSettings.getId()});
- throw ce;
- }
- channelSettings.setServerOnly(true);
- }
- else if (clientType != null && serverOnly) // Both set.
- {
- // Endpoint ''{0}'' cannot have both class and server-only attribute defined.
- ConfigurationException ce = new ConfigurationException();
- ce.setMessage(CLASS_AND_SERVER_ONLY_ERROR, new Object[]{channelSettings.getId()});
- throw ce;
- }
- else // One of them set.
- {
- if (serverOnly)
- channelSettings.setServerOnly(true);
- else
- channelSettings.setClientType(clientType);
- }
- }
-
- private void channelInclude(Node channelInclude)
- {
- // Validation
- allowedAttributesOrElements(channelInclude, CHANNEL_INCLUDE_CHILDREN);
-
- String src = getAttributeOrChildElement(channelInclude, SRC_ATTR);
- String dir = getAttributeOrChildElement(channelInclude, DIRECTORY_ATTR);
- if (src.length() > 0)
- {
- channelIncludeFile(src);
- }
- else if (dir.length() > 0)
- {
- channelIncludeDirectory(dir);
- }
- else
- {
- // The include element ''{0}'' must specify either the ''{1}'' or ''{2}'' attribute.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(MISSING_INCLUDE_ATTRIBUTES, new Object[]{channelInclude.getNodeName(), SRC_ATTR, DIRECTORY_ATTR});
- throw ex;
- }
- }
-
- private void channelIncludeFile(String src)
- {
- Document doc = loadDocument(src, fileResolver.getIncludedFile(src));
- doc.getDocumentElement().normalize();
-
- // Check for multiple channels in a single file.
- Node channelsNode = selectSingleNode(doc, CHANNELS_ELEMENT);
- if (channelsNode != null)
- {
- allowedChildElements(channelsNode, CHANNELS_CHILDREN);
- NodeList channels = selectNodeList(channelsNode, CHANNEL_DEFINITION_ELEMENT);
- for (int a = 0; a < channels.getLength(); a++)
- {
- Node service = channels.item(a);
- channelDefinition(service);
- }
- fileResolver.popIncludedFile();
- }
- else // Check for single channel in the file.
- {
- Node channel = selectSingleNode(doc, "/" + CHANNEL_DEFINITION_ELEMENT);
- if (channel != null)
- {
- channelDefinition(channel);
- fileResolver.popIncludedFile();
- }
- else
- {
- // The {0} root element in file {1} must be '{CHANNELS_ELEMENT}' or '{CHANNEL_ELEMENT}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_INCLUDE_ROOT, new Object[]{CHANNEL_INCLUDE_ELEMENT, src, CHANNELS_ELEMENT, CHANNEL_DEFINITION_ELEMENT});
- throw ex;
- }
- }
- }
-
- private void channelIncludeDirectory(String dir)
- {
- List files = fileResolver.getFiles(dir);
- for (int i = 0; i < files.size(); i++)
- {
- String src = (String) files.get(i);
- channelIncludeFile(src);
- }
- }
-
- private void services(Node root)
- {
- Node servicesNode = selectSingleNode(root, SERVICES_ELEMENT);
- if (servicesNode != null)
- {
- // Validation
- allowedChildElements(servicesNode, SERVICES_CHILDREN);
-
- // Default Channels for the application
- Node defaultChannels = selectSingleNode(servicesNode, DEFAULT_CHANNELS_ELEMENT);
- if (defaultChannels != null)
- {
- allowedChildElements(defaultChannels, DEFAULT_CHANNELS_CHILDREN);
- NodeList channels = selectNodeList(defaultChannels, CHANNEL_ELEMENT);
- for (int c = 0; c < channels.getLength(); c++)
- {
- Node chan = channels.item(c);
- allowedAttributes(chan, new String[] {REF_ATTR});
- defaultChannel(chan);
- }
- }
-
- // Service Includes
- NodeList services = selectNodeList(servicesNode, SERVICE_INCLUDE_ELEMENT);
- for (int i = 0; i < services.getLength(); i++)
- {
- Node service = services.item(i);
- serviceInclude(service);
- }
-
- // Service
- services = selectNodeList(servicesNode, SERVICE_ELEMENT);
- for (int i = 0; i < services.getLength(); i++)
- {
- Node service = services.item(i);
- service(service);
- }
- }
- }
-
- private void serviceInclude(Node serviceInclude)
- {
- // Validation
- allowedAttributesOrElements(serviceInclude, SERVICE_INCLUDE_CHILDREN);
-
- String src = getAttributeOrChildElement(serviceInclude, SRC_ATTR);
- String dir = getAttributeOrChildElement(serviceInclude, DIRECTORY_ATTR);
- if (src.length() > 0)
- {
- serviceIncludeFile(src);
- }
- else if (dir.length() > 0)
- {
- serviceIncludeDirectory(dir);
- }
- else
- {
- // The include element ''{0}'' must specify either the ''{1}'' or ''{2}'' attribute.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(MISSING_INCLUDE_ATTRIBUTES, new Object[]{serviceInclude.getNodeName(), SRC_ATTR, DIRECTORY_ATTR});
- throw ex;
- }
- }
-
- private void serviceIncludeFile(String src)
- {
- Document doc = loadDocument(src, fileResolver.getIncludedFile(src));
- doc.getDocumentElement().normalize();
-
- // Check for multiple services defined in a <services> tag
- Node servicesNode = selectSingleNode(doc, SERVICES_ELEMENT);
- if (servicesNode != null)
- {
- allowedChildElements(servicesNode, SERVICES_CHILDREN);
- NodeList services = selectNodeList(servicesNode, SERVICE_ELEMENT);
- for (int a = 0; a < services.getLength(); a++)
- {
- Node service = services.item(a);
- service(service);
- }
- fileResolver.popIncludedFile();
- }
- else // Check for single <service> definition.
- {
- Node service = selectSingleNode(doc, "/" + SERVICE_ELEMENT);
- if (service != null)
- {
- service(service);
- fileResolver.popIncludedFile();
- }
- else
- {
- // The {0} root element in file {1} must be ''{2}'' or ''{3}''.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_INCLUDE_ROOT, new Object[]{SERVICE_INCLUDE_ELEMENT, src, SERVICES_ELEMENT, SERVICE_ELEMENT});
- throw ex;
- }
- }
- }
-
- private void serviceIncludeDirectory(String dir)
- {
- List files = fileResolver.getFiles(dir);
- for (int i = 0; i < files.size(); i++)
- {
- String src = (String) files.get(i);
- serviceIncludeFile(src);
- }
- }
-
- private void service(Node service)
- {
- // Validation
- requiredAttributesOrElements(service, SERVICE_REQ_CHILDREN);
- allowedAttributesOrElements(service, SERVICE_CHILDREN);
-
- String id = getAttributeOrChildElement(service, ID_ATTR);
- if (isValidID(id))
- {
- ServiceSettings serviceSettings = config.getServiceSettings(id);
- if (serviceSettings == null)
- {
- serviceSettings = new ServiceSettings(id);
- serviceSettings.setSourceFile(getSourceFileOf(service));
- config.addServiceSettings(serviceSettings);
- }
- else
- {
- // Duplicate service definition '{0}'.
- ConfigurationException e = new ConfigurationException();
- e.setMessage(DUPLICATE_SERVICE_ERROR, new Object[]{id});
- throw e;
- }
-
- // Service Class Name
- String className = getAttributeOrChildElement(service, CLASS_ATTR);
- if (className.length() > 0)
- {
- serviceSettings.setClassName(className);
-
- // Sniff for AdvancedMessagingSupport.
- if (className.equals("flex.messaging.services.AdvancedMessagingSupport"))
- advancedMessagingSupportRegistered = true;
- }
- else
- {
- // Class not specified for {SERVICE_ELEMENT} '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(CLASS_NOT_SPECIFIED, new Object[]{SERVICE_ELEMENT, id});
- throw ex;
- }
-
- // Service Message Types - deprecated
-
- // Service Properties
- NodeList properties = selectNodeList(service, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(service));
- serviceSettings.addProperties(map);
- }
-
- // Default Channels
- Node defaultChannels = selectSingleNode(service, DEFAULT_CHANNELS_ELEMENT);
- if (defaultChannels != null)
- {
- allowedChildElements(defaultChannels, DEFAULT_CHANNELS_CHILDREN);
- NodeList channels = selectNodeList(defaultChannels, CHANNEL_ELEMENT);
- for (int c = 0; c < channels.getLength(); c++)
- {
- Node chan = channels.item(c);
- allowedAttributes(chan, new String[] {REF_ATTR});
- defaultChannel(chan, serviceSettings);
- }
- }
- // Fall back on application's default channels
- else if (config.getDefaultChannels().size() > 0)
- {
- for (Iterator iter = config.getDefaultChannels().iterator(); iter.hasNext();)
- {
- String channelId = (String)iter.next();
- ChannelSettings channel = config.getChannelSettings(channelId);
- serviceSettings.addDefaultChannel(channel);
- }
- }
-
- // Default Security Constraint
- Node defaultSecurityConstraint = selectSingleNode(service, DEFAULT_SECURITY_CONSTRAINT_ELEMENT);
- if (defaultSecurityConstraint != null)
- {
- // Validation
- requiredAttributesOrElements(defaultSecurityConstraint, new String[] {REF_ATTR});
- allowedAttributesOrElements(defaultSecurityConstraint, new String[] {REF_ATTR});
-
- String ref = getAttributeOrChildElement(defaultSecurityConstraint, REF_ATTR);
- if (ref.length() > 0)
- {
- SecurityConstraint sc = ((MessagingConfiguration)config).getSecuritySettings().getConstraint(ref);
- if (sc == null)
- {
- // {SECURITY_CONSTRAINT_DEFINITION_ELEMENT} not found for reference '{ref}'.
- ConfigurationException e = new ConfigurationException();
- e.setMessage(REF_NOT_FOUND, new Object[]{SECURITY_CONSTRAINT_DEFINITION_ELEMENT, ref});
- throw e;
- }
- serviceSettings.setConstraint(sc);
- }
- else
- {
- //Invalid default-security-constraint reference ''{0}'' in service ''{1}''.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_SECURITY_CONSTRAINT_REF, new Object[]{ref, id});
- throw ex;
- }
- }
-
- // Adapter Definitions
- Node adapters = selectSingleNode(service, ADAPTERS_ELEMENT);
- if (adapters != null)
- {
- allowedChildElements(adapters, ADAPTERS_CHILDREN);
- NodeList serverAdapters = selectNodeList(adapters, ADAPTER_DEFINITION_ELEMENT);
- for (int a = 0; a < serverAdapters.getLength(); a++)
- {
- Node adapter = serverAdapters.item(a);
- adapterDefinition(adapter, serviceSettings);
- }
- NodeList adapterIncludes = selectNodeList(adapters, ADAPTER_INCLUDE_ELEMENT);
- for (int a = 0; a < adapterIncludes.getLength(); a++)
- {
- Node include = adapterIncludes.item(a);
- adapterInclude(include, serviceSettings);
- }
- }
-
- // Destinations
- NodeList list = selectNodeList(service, DESTINATION_ELEMENT);
- for (int i = 0; i < list.getLength(); i++)
- {
- Node dest = list.item(i);
- destination(dest, serviceSettings);
- }
-
- // Destination Includes
- list = selectNodeList(service, DESTINATION_INCLUDE_ELEMENT);
- for (int i = 0; i < list.getLength(); i++)
- {
- Node dest = list.item(i);
- destinationInclude(dest, serviceSettings);
- }
- }
- else
- {
- //Invalid {SERVICE_ELEMENT} id '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_ID, new Object[]{SERVICE_ELEMENT, id});
- throw ex;
- }
- }
-
- /**
- * A Flex application can declare default channels for its services. If a
- * service specifies its own list of channels it overrides these defaults.
- * <p>
- * <default-channels><br/>
- * <channel ref="channel-id"/><br/>
- * <default-channels>
- * </p>
- * @param chan the channel node
- */
- private void defaultChannel(Node chan)
- {
- String ref = getAttributeOrChildElement(chan, REF_ATTR);
-
- if (ref.length() > 0)
- {
- ChannelSettings channel = config.getChannelSettings(ref);
- if (channel != null)
- {
- config.addDefaultChannel(channel.getId());
- }
- else
- {
- // {0} not found for reference '{1}'
- ConfigurationException e = new ConfigurationException();
- e.setMessage(REF_NOT_FOUND, new Object[]{CHANNEL_ELEMENT, ref});
- throw e;
- }
- }
- else
- {
- //A default channel was specified without a reference for service '{0}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_DEFAULT_CHANNEL, new Object[]{"MessageBroker"});
- throw ex;
- }
- }
-
- /**
- * A service can declare default channels for its destinations. If a destination
- * specifies its own list of channels it overrides these defaults.
- * <p>
- * <default-channels><br/>
- * <channel ref="channel-id"/><br/>
- * <default-channels>
- * </p>
- * @param chan the channel node
- * @param serviceSettings service settings
- */
- private void defaultChannel(Node chan, ServiceSettings serviceSettings)
- {
- String ref = getAttributeOrChildElement(chan, REF_ATTR);
-
- if (ref.length() > 0)
- {
- ChannelSettings channel = config.getChannelSettings(ref);
- if (channel != null)
- {
- serviceSettings.addDefaultChannel(channel);
- }
- else
- {
- // {0} not found for reference '{1}'
- ConfigurationException e = new ConfigurationException();
- e.setMessage(REF_NOT_FOUND, new Object[]{CHANNEL_ELEMENT, ref});
- throw e;
- }
- }
- else
- {
- //A default channel was specified without a reference for service '{0}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_DEFAULT_CHANNEL, new Object[]{serviceSettings.getId()});
- throw ex;
- }
- }
-
- private void adapterDefinition(Node adapter, ServiceSettings serviceSettings)
- {
- // Validation
- requiredAttributesOrElements(adapter, ADAPTER_DEFINITION_REQ_CHILDREN);
- allowedChildElements(adapter, ADAPTER_DEFINITION_CHILDREN);
-
- String serviceId = serviceSettings.getId();
-
- String id = getAttributeOrChildElement(adapter, ID_ATTR);
- if (isValidID(id))
- {
- AdapterSettings adapterSettings = new AdapterSettings(id);
- adapterSettings.setSourceFile(getSourceFileOf(adapter));
- String className = getAttributeOrChildElement(adapter, CLASS_ATTR);
-
- if (className.length() > 0)
- {
- adapterSettings.setClassName(className);
-
- // Default Adapter Check
- boolean isDefault = Boolean.valueOf(getAttributeOrChildElement(adapter, DEFAULT_ATTR));
- if (isDefault)
- {
- adapterSettings.setDefault(isDefault);
-
- AdapterSettings defaultAdapter;
- defaultAdapter = serviceSettings.getDefaultAdapter();
-
- if (defaultAdapter != null)
- {
- // Duplicate default adapter '{0}' in service '{1}'. '{2}' has already been selected as the default.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(DUPLICATE_DEFAULT_ADAPTER, new Object[]{id, serviceId, defaultAdapter.getId()});
- throw ex;
- }
- }
-
- serviceSettings.addAdapterSettings(adapterSettings);
-
- // Adapter Properties
- NodeList properties = selectNodeList(adapter, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(adapter));
- adapterSettings.addProperties(map);
- }
- }
- else
- {
- // Class not specified for {ADAPTER_DEFINITION_ELEMENT} '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(CLASS_NOT_SPECIFIED, new Object[]{ADAPTER_DEFINITION_ELEMENT, id});
- throw ex;
- }
- }
- else
- {
- //Invalid {ADAPTER_DEFINITION_ELEMENT} id '{id}' for service '{serviceId}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_ID_IN_SERVICE, new Object[]{ADAPTER_DEFINITION_ELEMENT, id, serviceId});
- throw ex;
- }
- }
-
- private void adapterInclude(Node adapterInclude, ServiceSettings serviceSettings)
- {
- // Validation
- allowedAttributesOrElements(adapterInclude, ADAPTER_INCLUDE_CHILDREN);
-
- String src = getAttributeOrChildElement(adapterInclude, SRC_ATTR);
- String dir = getAttributeOrChildElement(adapterInclude, DIRECTORY_ATTR);
- if (src.length() > 0)
- {
- adapterIncludeFile(serviceSettings, src);
- }
- else if (dir.length() > 0)
- {
- adapterIncludeDirectory(serviceSettings, dir);
- }
- else
- {
- // Attribute '{0}' must be specified for element '{1}'
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(MISSING_INCLUDE_ATTRIBUTES, new Object[]{adapterInclude.getNodeName(), SRC_ATTR, DIRECTORY_ATTR});
- throw ex;
- }
- }
-
- private void adapterIncludeDirectory(ServiceSettings serviceSettings, String dir)
- {
- List files = fileResolver.getFiles(dir);
- for (int i = 0; i < files.size(); i++)
- {
- String src = (String) files.get(i);
- adapterIncludeFile(serviceSettings, src);
- }
- }
-
- private void adapterIncludeFile(ServiceSettings serviceSettings, String src)
- {
- Document doc = loadDocument(src, fileResolver.getIncludedFile(src));
- doc.getDocumentElement().normalize();
-
- // Check for multiple adapters defined in file wrapped in an <adapters> element
- Node adaptersNode = selectSingleNode(doc, ADAPTERS_ELEMENT);
- if (adaptersNode != null)
- {
- allowedChildElements(adaptersNode, ADAPTERS_CHILDREN);
- NodeList adapters = selectNodeList(adaptersNode, ADAPTER_DEFINITION_ELEMENT);
- for (int a = 0; a < adapters.getLength(); a++)
- {
- Node adapter = adapters.item(a);
- adapterDefinition(adapter, serviceSettings);
- }
- fileResolver.popIncludedFile();
- }
- else // Check for single adapter
- {
- Node adapter = selectSingleNode(doc, "/" + ADAPTER_DEFINITION_ELEMENT);
- if (adapter != null)
- {
- adapterDefinition(adapter, serviceSettings);
- fileResolver.popIncludedFile();
- }
- else
- {
- // The {0} root element in file {1} must be ''{2}'' or ''{3}''.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_INCLUDE_ROOT, new Object[]{ADAPTER_INCLUDE_ELEMENT, src, ADAPTERS_ELEMENT, ADAPTER_DEFINITION_ELEMENT});
- throw ex;
- }
- }
- }
-
- private void destinationInclude(Node destInclude, ServiceSettings serviceSettings)
- {
- // Validation
- allowedAttributesOrElements(destInclude, DESTINATION_INCLUDE_CHILDREN);
-
- String src = getAttributeOrChildElement(destInclude, SRC_ATTR);
- String dir = getAttributeOrChildElement(destInclude, DIRECTORY_ATTR);
- if (src.length() > 0)
- {
- destinationIncludeFile(serviceSettings, src);
- }
- else if (dir.length() > 0)
- {
- destinationIncludeDirectory(serviceSettings, dir);
- }
- else
- {
- // The include element ''{0}'' must specify either the ''{1}'' or ''{2}'' attribute.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(MISSING_INCLUDE_ATTRIBUTES, new Object[]{destInclude.getNodeName(), SRC_ATTR, DIRECTORY_ATTR});
- throw ex;
- }
- }
-
- private void destinationIncludeDirectory(ServiceSettings serviceSettings, String dir)
- {
- List files = fileResolver.getFiles(dir);
- for (int i = 0; i < files.size(); i++)
- {
- String src = (String) files.get(i);
- destinationIncludeFile(serviceSettings, src);
- }
- }
-
- private void destinationIncludeFile(ServiceSettings serviceSettings, String src)
- {
- Document doc = loadDocument(src, fileResolver.getIncludedFile(src));
- doc.getDocumentElement().normalize();
-
- // Check for multiple destination defined in file.
- Node destinationsNode = selectSingleNode(doc, DESTINATIONS_ELEMENT);
- if (destinationsNode != null)
- {
- allowedChildElements(destinationsNode, DESTINATIONS_CHILDREN);
- NodeList destinations = selectNodeList(destinationsNode, DESTINATION_ELEMENT);
- for (int a = 0; a < destinations.getLength(); a++)
- {
- Node dest = destinations.item(a);
- destination(dest, serviceSettings);
- }
- fileResolver.popIncludedFile();
- }
- else // Check for single destination definition.
- {
- Node dest = selectSingleNode(doc, "/" + DESTINATION_ELEMENT);
- if (dest != null)
- {
- destination(dest, serviceSettings);
- fileResolver.popIncludedFile();
- }
- else
- {
- // The {0} root element in file {1} must be ''{2}'' or ''{3}''.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_INCLUDE_ROOT, new Object[]{DESTINATION_INCLUDE_ELEMENT, src, DESTINATIONS_ELEMENT, DESTINATION_ELEMENT});
- throw ex;
- }
- }
- }
-
- private void destination(Node dest, ServiceSettings serviceSettings)
- {
- // Validation
- requiredAttributesOrElements(dest, DESTINATION_REQ_CHILDREN);
- allowedAttributes(dest, DESTINATION_ATTR);
- allowedChildElements(dest, DESTINATION_CHILDREN);
-
- String serviceId = serviceSettings.getId();
-
- DestinationSettings destinationSettings;
- String id = getAttributeOrChildElement(dest, ID_ATTR);
- if (isValidID(id))
- {
- destinationSettings = (DestinationSettings)serviceSettings.getDestinationSettings().get(id);
- if (destinationSettings != null)
- {
- // Duplicate destination definition '{id}' in service '{serviceId}'.
- ConfigurationException e = new ConfigurationException();
- e.setMessage(DUPLICATE_DESTINATION_ERROR, new Object[]{id, serviceId});
- throw e;
- }
-
- destinationSettings = new DestinationSettings(id);
- destinationSettings.setSourceFile(getSourceFileOf(dest));
- serviceSettings.addDestinationSettings(destinationSettings);
- }
- else
- {
- //Invalid {DESTINATION_ELEMENT} id '{id}' for service '{serviceId}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_ID_IN_SERVICE, new Object[]{DESTINATION_ELEMENT, id, serviceId});
- throw ex;
- }
-
- // Destination Properties
- NodeList properties = selectNodeList(dest, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(dest));
- destinationSettings.addProperties(map);
-
- // Sniff for <network><reliable>true|false</reliable></network> setting.
- // Also sniff for inbound and outbound throttle policies of buffer and conflate.
- // All these features are only supported when advanced messaging support is enabled.
- if (!verifyAdvancedMessagingSupport)
- {
- ConfigMap networkSettings = map.getPropertyAsMap(NetworkSettings.NETWORK_ELEMENT, null);
- if (networkSettings != null)
- {
- String reliable = networkSettings.getPropertyAsString(NetworkSettings.RELIABLE_ELEMENT, null);
- if (reliable != null && Boolean.valueOf(reliable))
- {
- verifyAdvancedMessagingSupport = true;
- }
- else
- {
- ConfigMap inbound = networkSettings.getPropertyAsMap(ThrottleSettings.ELEMENT_INBOUND, null);
- if (inbound != null)
- {
- String policy = inbound.getPropertyAsString(ThrottleSettings.ELEMENT_POLICY, null);
- if (policy != null && (Policy.BUFFER.toString().equalsIgnoreCase(policy)
- || Policy.CONFLATE.toString().equalsIgnoreCase(policy)))
- verifyAdvancedMessagingSupport = true;
- }
- if (!verifyAdvancedMessagingSupport)
- {
- ConfigMap outbound = networkSettings.getPropertyAsMap(ThrottleSettings.ELEMENT_OUTBOUND, null);
- if (outbound != null)
- {
- String policy = outbound.getPropertyAsString(ThrottleSettings.ELEMENT_POLICY, null);
- if (policy != null && (Policy.BUFFER.toString().equalsIgnoreCase(policy)
- || Policy.CONFLATE.toString().equalsIgnoreCase(policy)))
- verifyAdvancedMessagingSupport = true;
- }
- }
- }
- }
- }
- }
-
- // Channels
- destinationChannels(dest, destinationSettings, serviceSettings);
-
- // Security
- destinationSecurity(dest, destinationSettings, serviceSettings);
-
- // Service Adapter
- destinationAdapter(dest, destinationSettings, serviceSettings);
- }
-
- private void destinationChannels(Node dest, DestinationSettings destinationSettings, ServiceSettings serviceSettings)
- {
- String destId = destinationSettings.getId();
-
- // Channels attribute
- String channelsList = evaluateExpression(dest, "@" + CHANNELS_ATTR).toString().trim();
- if (channelsList.length() > 0)
- {
- StringTokenizer st = new StringTokenizer(channelsList, LIST_DELIMITERS);
- while (st.hasMoreTokens())
- {
- String ref = st.nextToken().trim();
- ChannelSettings channel = config.getChannelSettings(ref);
- if (channel != null)
- {
- destinationSettings.addChannelSettings(channel);
- }
- else
- {
- // {CHANNEL_ELEMENT} not found for reference '{ref}' in destination '{destId}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(REF_NOT_FOUND_IN_DEST, new Object[]{CHANNEL_ELEMENT, ref, destId});
- throw ex;
- }
- }
- }
- else
- {
- // Channels element
- Node channelsNode = selectSingleNode(dest, CHANNELS_ELEMENT);
- if (channelsNode != null)
- {
- allowedChildElements(channelsNode, DESTINATION_CHANNELS_CHILDREN);
- NodeList channels = selectNodeList(channelsNode, CHANNEL_ELEMENT);
- for (int c = 0; c < channels.getLength(); c++)
- {
- Node chan = channels.item(c);
-
- // Validation
- requiredAttributesOrElements(chan, DESTINATION_CHANNEL_REQ_CHILDREN);
-
- String ref = getAttributeOrChildElement(chan, REF_ATTR);
- if (ref.length() > 0)
- {
- ChannelSettings channel = config.getChannelSettings(ref);
- if (channel != null)
- {
- destinationSettings.addChannelSettings(channel);
- }
- else
- {
- // {CHANNEL_ELEMENT} not found for reference '{ref}' in destination '{destId}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(REF_NOT_FOUND_IN_DEST, new Object[]{CHANNEL_ELEMENT, ref, destId});
- throw ex;
- }
- }
- else
- {
- //Invalid {0} ref '{1}' in destination '{2}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_REF_IN_DEST, new Object[]{CHANNEL_ELEMENT, ref, destId});
- throw ex;
- }
- }
- }
- else
- {
- // Finally, we fall back to the service's default channels
- List defaultChannels = serviceSettings.getDefaultChannels();
- Iterator it = defaultChannels.iterator();
- while (it.hasNext())
- {
- ChannelSettings channel = (ChannelSettings)it.next();
- destinationSettings.addChannelSettings(channel);
- }
- }
- }
-
- if (destinationSettings.getChannelSettings().size() <= 0)
- {
- // Destination '{id}' must specify at least one channel.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(DEST_NEEDS_CHANNEL, new Object[]{destId});
- throw ex;
- }
- }
-
- private void destinationSecurity(Node dest, DestinationSettings destinationSettings, ServiceSettings serviceSettings)
- {
- String destId = destinationSettings.getId();
-
- // Security-constraint short-cut attribute
- String ref = evaluateExpression(dest, "@" + SECURITY_CONSTRAINT_ATTR).toString().trim();
- if (ref.length() > 0)
- {
- SecurityConstraint sc = ((MessagingConfiguration)config).getSecuritySettings().getConstraint(ref);
- if (sc != null)
- {
- destinationSettings.setConstraint(sc);
- }
- else
- {
- // {SECURITY_CONSTRAINT_ELEMENT} not found for reference '{ref}' in destination '{destId}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(REF_NOT_FOUND_IN_DEST, new Object[]{SECURITY_CONSTRAINT_ATTR, ref, destId});
- throw ex;
- }
- }
- else
- {
- // Inline security element
- Node security = selectSingleNode(dest, SECURITY_ELEMENT);
- if (security != null)
- {
- allowedChildElements(security, EMBEDDED_SECURITY_CHILDREN);
- Node constraint = selectSingleNode(security, SECURITY_CONSTRAINT_ELEMENT);
- if (constraint != null)
- {
- SecurityConstraint sc = securityConstraint(constraint, true);
- destinationSettings.setConstraint(sc);
- }
- }
- else
- {
- // Finally, we fall back to the service's default security constraint
- SecurityConstraint sc = serviceSettings.getConstraint();
- if (sc != null)
- {
- destinationSettings.setConstraint(sc);
- }
- }
- }
- }
-
- private void destinationAdapter(Node dest, DestinationSettings destinationSettings, ServiceSettings serviceSettings)
- {
- String destId = destinationSettings.getId();
-
- // Adapter attribute
- String ref = evaluateExpression(dest, "@" + ADAPTER_ATTR).toString().trim();
- if (ref.length() > 0)
- {
- adapterReference(ref, destinationSettings, serviceSettings);
- }
- else
- {
- Node adapter = selectSingleNode(dest, ADAPTER_ELEMENT);
-
- // Adapter element
- if (adapter != null)
- {
- allowedAttributesOrElements(adapter, DESTINATION_ADAPTER_CHILDREN);
- ref = getAttributeOrChildElement(adapter, REF_ATTR);
- adapterReference(ref, destinationSettings, serviceSettings);
- }
- else
- {
- // Default Adapter (optionally set at the service level)
- AdapterSettings adapterSettings = serviceSettings.getDefaultAdapter();
- if (adapterSettings != null)
- {
- destinationSettings.setAdapterSettings(adapterSettings);
- }
- }
- }
-
- if (destinationSettings.getAdapterSettings() == null)
- {
- // Destination '{id}' must specify at least one adapter.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(DEST_NEEDS_ADAPTER, new Object[]{destId});
- throw ex;
- }
- }
-
- private void adapterReference(String ref, DestinationSettings destinationSettings, ServiceSettings serviceSettings)
- {
- String destId = destinationSettings.getId();
- if (ref.length() > 0)
- {
- AdapterSettings adapterSettings = serviceSettings.getAdapterSettings(ref);
- if (adapterSettings != null)
- {
- destinationSettings.setAdapterSettings(adapterSettings);
- }
- else
- {
- // {ADAPTER_ELEMENT} not found for reference '{ref}' in destination '{destId}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(REF_NOT_FOUND_IN_DEST, new Object[]{ADAPTER_ELEMENT, ref, destId});
- throw ex;
- }
- }
- else
- {
- //Invalid {ADAPTER_ELEMENT} ref '{ref}' in destination '{destId}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_REF_IN_DEST, new Object[]{ADAPTER_ELEMENT, ref, destId});
- throw ex;
- }
- }
-
- private void logging(Node root)
- {
- Node logging = selectSingleNode(root, LOGGING_ELEMENT);
- if (logging != null)
- {
- // Validation
- allowedAttributesOrElements(logging, LOGGING_CHILDREN);
-
- LoggingSettings settings = new LoggingSettings();
-
- // Log Properties
- NodeList properties = selectNodeList(logging, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(logging));
- settings.addProperties(map);
- }
-
- NodeList targets = selectNodeList(logging, TARGET_ELEMENT);
- for (int i = 0; i < targets.getLength(); i++)
- {
- Node targetNode = targets.item(i);
-
- // Target Validation
- requiredAttributesOrElements(targetNode, TARGET_REQ_CHILDREN);
- allowedAttributesOrElements(targetNode, TARGET_CHILDREN);
-
- String className = getAttributeOrChildElement(targetNode, CLASS_ATTR);
-
- if (className.length() > 0)
- {
- TargetSettings targetSettings = new TargetSettings(className);
- String targetLevel = getAttributeOrChildElement(targetNode, LEVEL_ATTR);
-
- if (targetLevel.length() > 0)
- targetSettings.setLevel(targetLevel);
-
- // Filters
- Node filtersNode = selectSingleNode(targetNode, FILTERS_ELEMENT);
- if (filtersNode != null)
- {
- allowedChildElements(filtersNode, FILTERS_CHILDREN);
- NodeList filters = selectNodeList(filtersNode, PATTERN_ELEMENT);
- for (int f = 0; f < filters.getLength(); f++)
- {
- Node pattern = filters.item(f);
- String filter = evaluateExpression(pattern, ".").toString().trim();
- targetSettings.addFilter(filter);
- }
- }
-
- // Target Properties
- properties = selectNodeList(targetNode, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(targetNode));
- targetSettings.addProperties(map);
- }
-
- settings.addTarget(targetSettings);
- }
- }
-
- config.setLoggingSettings(settings);
- }
- }
-
- private void system(Node root)
- {
- Node system = selectSingleNode(root, SYSTEM_ELEMENT);
- if (system == null)
- {
- // Create a default instance of SystemSettings which by default has setManagable as true
- // and has setRedeployEnabled as false.
- ((MessagingConfiguration)config).setSystemSettings(new SystemSettings());
- return;
- }
-
- allowedAttributesOrElements(system, SYSTEM_CHILDREN);
-
- SystemSettings settings = new SystemSettings();
-
- settings.setEnforceEndpointValidation(getAttributeOrChildElement(system, ENFORCE_ENDOINT_VALIDATION));
- locale(system, settings);
- settings.setManageable(getAttributeOrChildElement(system, MANAGEABLE_ELEMENT));
- settings.setDotNetFrameworkVersion(getAttributeOrChildElement(system, DOTNET_FRAMEWORK_VERSION));
- redeploy(system, settings);
- uuidGenerator(system, settings);
-
- ((MessagingConfiguration)config).setSystemSettings(settings);
- }
-
- private void redeploy(Node system, SystemSettings settings)
- {
- Node redeployNode = selectSingleNode(system, REDEPLOY_ELEMENT);
- if (redeployNode == null)
- return;
-
- allowedAttributesOrElements(redeployNode, REDEPLOY_CHILDREN);
-
- String enabled = getAttributeOrChildElement(redeployNode, ENABLED_ELEMENT);
- settings.setRedeployEnabled(enabled);
-
- String interval = getAttributeOrChildElement(redeployNode, WATCH_INTERVAL_ELEMENT);
- if (interval.length() > 0)
- {
- settings.setWatchInterval(interval);
- }
-
- NodeList watches = selectNodeList(redeployNode, WATCH_FILE_ELEMENT);
- for (int i = 0; i < watches.getLength(); i++)
- {
- Node watchNode = watches.item(i);
- String watch = evaluateExpression(watchNode, ".").toString().trim();
- if (watch.length() > 0)
- {
- settings.addWatchFile(watch);
- }
- }
-
- NodeList touches = selectNodeList(redeployNode, TOUCH_FILE_ELEMENT);
- for (int i = 0; i < touches.getLength(); i++)
- {
- Node touchNode = touches.item(i);
- String touch = evaluateExpression(touchNode, ".").toString().trim();
- if (touch.length() > 0)
- {
- settings.addTouchFile(touch);
- }
- }
- }
-
- private void locale(Node system, SystemSettings settings)
- {
- Node localeNode = selectSingleNode(system, LOCALE_ELEMENT);
- if (localeNode == null)
- return;
-
- allowedAttributesOrElements(localeNode, LOCALE_CHILDREN);
-
- String defaultLocaleString = getAttributeOrChildElement(localeNode, DEFAULT_LOCALE_ELEMENT);
- Locale defaultLocale = defaultLocaleString.length() > 0? LocaleUtils.buildLocale(defaultLocaleString) : LocaleUtils.buildLocale(null);
- settings.setDefaultLocale(defaultLocale);
- }
-
- private void uuidGenerator(Node system, SystemSettings settings)
- {
- Node uuidGenerator = selectSingleNode(system, UUID_GENERATOR_ELEMENT);
- if (uuidGenerator == null)
- return;
-
- requiredAttributesOrElements(uuidGenerator, UUID_GENERATOR_REQ_CHILDREN);
-
- String className = getAttributeOrChildElement(uuidGenerator, CLASS_ATTR);
- if (className.length() == 0)
- {
- // Class not specified for {UUID_GENERATOR_ELEMENT} '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(CLASS_NOT_SPECIFIED, new Object[]{UUID_GENERATOR_ELEMENT, ""});
- throw ex;
- }
-
- settings.setUUIDGeneratorClassName(className);
- }
-
- private void flexClient(Node root)
- {
- Node flexClient = selectSingleNode(root, FLEX_CLIENT_ELEMENT);
- if (flexClient != null)
- {
- // Validation
- allowedChildElements(flexClient, FLEX_CLIENT_CHILDREN);
-
- FlexClientSettings flexClientSettings = new FlexClientSettings();
-
- // Timeout
- String timeout = getAttributeOrChildElement(flexClient, FLEX_CLIENT_TIMEOUT_MINUTES_ELEMENT);
- if (timeout.length() > 0)
- {
- try
- {
- long timeoutMinutes = Long.parseLong(timeout);
- if (timeoutMinutes < 0)
- {
- // Invalid timeout minutes value ''{0}'' in the <flex-client> configuration section. Please specify a positive value or leave the element undefined in which case flex client instances on the server will be timed out when all associated sessions/connections have shut down.
- ConfigurationException e = new ConfigurationException();
- e.setMessage(INVALID_FLEX_CLIENT_TIMEOUT, new Object[]{timeout});
- throw e;
- }
- flexClientSettings.setTimeoutMinutes(timeoutMinutes);
- }
- catch (NumberFormatException nfe)
- {
- // Invalid timeout minutes value ''{0}'' in the <flex-client> configuration section. Please specify a positive value or leave the element undefined in which case flex client instances on the server will be timed out when all associated sessions/connections have shut down.
- ConfigurationException e = new ConfigurationException();
- e.setMessage(INVALID_FLEX_CLIENT_TIMEOUT, new Object[]{timeout});
- throw e;
- }
- }
- else
- {
- flexClientSettings.setTimeoutMinutes(0); // Default to 0; in this case FlexClients are invalidated when all associated sessions have been invalidated.
- }
-
- // Flex client queue processor
- Node outboundQueueProcessor = selectSingleNode(flexClient, FLEX_CLIENT_OUTBOUND_QUEUE_PROCESSOR_ELEMENT);
- if (outboundQueueProcessor != null)
- {
- // Validation
- requiredAttributesOrElements(outboundQueueProcessor, FLEX_CLIENT_OUTBOUND_QUEUE_PROCESSOR_REQ_CHILDREN);
-
- // Flex client queue processor class
- String outboundQueueProcessClass = getAttributeOrChildElement(outboundQueueProcessor, CLASS_ATTR);
- if (outboundQueueProcessClass.length() > 0)
- {
- flexClientSettings.setFlexClientOutboundQueueProcessorClassName(outboundQueueProcessClass);
- }
- else
- {
- // Class not specified for {FLEX_CLIENT_OUTBOUND_QUEUE_PROCESSOR_ELEMENT} '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(CLASS_NOT_SPECIFIED, new Object[]{FLEX_CLIENT_OUTBOUND_QUEUE_PROCESSOR_ELEMENT, ""});
- throw ex;
- }
-
- // Flex client queue processor properties
- NodeList properties = selectNodeList(outboundQueueProcessor, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(outboundQueueProcessor));
- flexClientSettings.setFlexClientOutboundQueueProcessorProperties(map);
- // Sniff for adaptive-frequency which requires advanced messaging support.
- boolean adaptiveFrequency = map.getPropertyAsBoolean(ADAPTIVE_FREQUENCY, false);
- if (adaptiveFrequency)
- verifyAdvancedMessagingSupport = true;
- }
- }
- ((MessagingConfiguration)config).setFlexClientSettings(flexClientSettings);
- }
- }
-
- private void factories(Node root)
- {
- Node factories = selectSingleNode(root, FACTORIES_ELEMENT);
- if (factories != null)
- {
- // Validation
- allowedAttributesOrElements(factories, FACTORIES_CHILDREN);
-
- NodeList factoryList = selectNodeList(factories, FACTORY_ELEMENT);
- for (int i = 0; i < factoryList.getLength(); i++)
- {
- Node factory = factoryList.item(i);
- factory(factory);
- }
- }
- }
-
- private void factory(Node factory)
- {
- // Validation
- requiredAttributesOrElements(factory, FACTORY_REQ_CHILDREN);
-
- String id = getAttributeOrChildElement(factory, ID_ATTR);
- String className = getAttributeOrChildElement(factory, CLASS_ATTR);
- if (isValidID(id))
- {
- FactorySettings factorySettings = new FactorySettings(id, className);
-
- // Factory Properties
- NodeList properties = selectNodeList(factory, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(factory));
- factorySettings.addProperties(map);
- }
- ((MessagingConfiguration)config).addFactorySettings(id, factorySettings);
- }
- else
- {
- // Invalid {FACTORY_ELEMENT} id '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(INVALID_ID, new Object[]{FACTORY_ELEMENT, id});
- ex.setDetails(INVALID_ID);
- throw ex;
- }
- }
-
- private void messageFilters(Node root)
- {
- typedMessageFilters(root, ASYNC_MESSAGE_FILTERS_ELEMENT, ASYNC_MESSAGE_FILTERS_ELEMENT_CHILDREN);
- typedMessageFilters(root, SYNC_MESSAGE_FILTERS_ELEMENT, SYNC_MESSAGE_FILTERS_ELEMENT_CHILDREN);
- }
-
- private void typedMessageFilters(Node root, String filterTypeElement, String[] childrenElements)
- {
- Node messageFiltersNode = selectSingleNode(root, filterTypeElement);
- if (messageFiltersNode == null)
- return;
-
- // Validation
- allowedChildElements(messageFiltersNode, childrenElements);
-
- // Message filter
- NodeList messageFilters = selectNodeList(messageFiltersNode, FILTER_ELEMENT);
- for (int i = 0; i < messageFilters.getLength(); i++)
- {
- Node messageFilter = messageFilters.item(i);
- messageFilter(messageFilter, filterTypeElement);
- }
- }
-
- private void messageFilter(Node messageFilter, String filterType)
- {
- // Validation
- requiredAttributesOrElements(messageFilter, FILTER_REQ_CHILDREN);
- allowedAttributesOrElements(messageFilter, FILTER_CHILDREN);
-
- String id = getAttributeOrChildElement(messageFilter, ID_ATTR);
- if (isValidID(id))
- {
- // Message filter class name
- String className = getAttributeOrChildElement(messageFilter, CLASS_ATTR);
- if (className.length() > 0)
- {
- MessageFilterSettings messageFilterSettings = new MessageFilterSettings();
- messageFilterSettings.setId(id);
- messageFilterSettings.setClassName(className);
- // Record type of filter.
- MessageFilterSettings.FilterType type = filterType.equals(ASYNC_MESSAGE_FILTERS_ELEMENT) ?
- MessageFilterSettings.FilterType.ASYNC :
- MessageFilterSettings.FilterType.SYNC;
- messageFilterSettings.setFilterType(type);
- // Custom server properties.
- NodeList properties = selectNodeList(messageFilter, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(messageFilter));
- messageFilterSettings.addProperties(map);
- }
- ((MessagingConfiguration)config).addMessageFilterSettings(messageFilterSettings);
- }
- else
- {
- // Class not specified for {FILTER_ELEMENT} '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(CLASS_NOT_SPECIFIED, new Object[]{FILTER_ELEMENT, id});
- throw ex;
- }
- }
- }
-
- private void validators(Node root)
- {
- Node validatorsNode = selectSingleNode(root, VALIDATORS_ELEMENT);
- if (validatorsNode == null)
- return;
-
- // Validation
- allowedChildElements(validatorsNode, VALIDATORS_CHILDREN);
-
- // Validator
- NodeList validators = selectNodeList(validatorsNode, VALIDATOR_ELEMENT);
- for (int i = 0; i < validators.getLength(); i++)
- {
- Node validator = validators.item(i);
- validator(validator);
- }
- }
-
- private void validator(Node validator)
- {
- // Validation
- requiredAttributesOrElements(validator, VALIDATOR_REQ_CHILDREN);
- allowedAttributesOrElements(validator, VALIDATOR_CHILDREN);
-
- ValidatorSettings validatorSettings = new ValidatorSettings();
-
- // Validator class name
- String className = getAttributeOrChildElement(validator, CLASS_ATTR);
- if (className.length() > 0)
- {
- validatorSettings.setClassName(className);
- }
- else
- {
- // Class not specified for {VALIDATOR_ELEMENT} '{id}'.
- ConfigurationException ex = new ConfigurationException();
- ex.setMessage(CLASS_NOT_SPECIFIED, new Object[]{VALIDATOR_ELEMENT, ""});
- throw ex;
- }
-
- // Validator type
- String type = getAttributeOrChildElement(validator, TYPE_ATTR);
- if (type.length() > 0)
- validatorSettings.setType(type);
-
- // Validator properties
- NodeList properties = selectNodeList(validator, PROPERTIES_ELEMENT + "/*");
- if (properties.getLength() > 0)
- {
- ConfigMap map = properties(properties, getSourceFileOf(validator));
- validatorSettings.addProperties(map);
- }
-
- ((MessagingConfiguration)config).addValidatorSettings(validatorSettings);
- }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package flex.messaging.config;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.StringTokenizer;
+
+import flex.messaging.config.ThrottleSettings.Policy;
+import flex.messaging.util.LocaleUtils;
+
+/**
+ * Processes DOM representation of a messaging configuration file.
+ * <p>
+ * Note: Since reference ids are used between elements, certain
+ * sections of the document need to be parsed first.
+ * </p>
+ *
+ * @author Peter Farland
+ * @exclude
+ */
+public abstract class ServerConfigurationParser extends AbstractConfigurationParser
+{
+ /**
+ * Used to verify that advanced messaging support has been registered if necessary.
+ * If other configuration requires it, but it was not registered a ConfigurationException is thrown.
+ */
+ private boolean verifyAdvancedMessagingSupport = false;
+ private boolean advancedMessagingSupportRegistered = false;
+
+ @Override
+ protected void parseTopLevelConfig(Document doc)
+ {
+ Node root = selectSingleNode(doc, "/" + SERVICES_CONFIG_ELEMENT);
+
+ if (root != null)
+ {
+ allowedChildElements(root, SERVICES_CONFIG_CHILDREN);
+
+ securitySection(root); // Parse security before channels.
+
+ serversSection(root);
+
+ channelsSection(root);
+
+ services(root);
+
+ clusters(root);
+
+ logging(root);
+
+ system(root);
+
+ flexClient(root);
+
+ factories(root);
+
+ messageFilters(root);
+
+ validators(root);
+
+ // Validate that any dependencies on advanced messaging support can be satisified at runtime.
+ if (verifyAdvancedMessagingSupport && !advancedMessagingSupportRegistered)
+ {
+ ConfigurationException e = new ConfigurationException();
+ e.setMessage(REQUIRE_ADVANCED_MESSAGING_SUPPORT);
+ throw e;
+ }
+ }
+ else
+ {
+ // The services configuration root element must be '{SERVICES_CONFIG_ELEMENT}'.
+ ConfigurationException e = new ConfigurationException();
+ e.setMessage(INVALID_SERVICES_ROOT, new Object[]{SERVICES_CONFIG_ELEMENT});
+ throw e;
+ }
+ }
+
+ private void clusters(Node root)
+ {
+ Node clusteringNode = selectSingleNode(root, CLUSTERS_ELEMENT);
+ if (clusteringNode != null)
+ {
+ allowedAttributesOrElements(clusteringNode, CLUSTERING_CHILDREN);
+
+ NodeList clusters = selectNodeList(clusteringNode, CLUSTER_DEFINITION_ELEMENT);
+ for (int i = 0; i < clusters.getLength(); i++)
+ {
+ Node cluster = clusters.item(i);
+ requiredAttributesOrElements(cluster, CLUSTER_DEFINITION_CHILDREN);
+ String clusterName = getAttributeOrChildElement(cluster, ID_ATTR);
+ if (!isValidID(clusterName))
+ continue;
+
+ String propsFileName = getAttributeOrChildElement(cluster, CLUSTER_PROPERTIES_ATTR);
+ ClusterSettings clusterSettings = new ClusterSettings();
+ clusterSettings.setClusterName(clusterName);
+ clusterSettings.setPropsFileName(propsFileName);
+ String className = getAttributeOrChildElement(cluster, CLASS_ATTR);
+ if (className != null && className.length() > 0)
+ clusterSettings.setImplementationClass(className);
+
+ String defaultValue = getAttributeOrChildElement(cluster, ClusterSettings.DEFAULT_ELEMENT);
+ if (defaultValue != null && defaultValue.length() > 0)
+ {
+ if (defaultValue.equalsIgnoreCase(TRUE_STRING))
+ clusterSettings.setDefault(true);
+ else if (!defaultValue.equalsIgnoreCase(FALSE_STRING))
+ {
+ ConfigurationException e = new ConfigurationException();
+ e.setMessage(10215, new Object[] {clusterName, defaultValue});
+ throw e;
+ }
+ }
+ String ulb = getAttributeOrChildElement(cluster, ClusterSettings.URL_LOAD_BALANCING);
+ if (ulb != null && ulb.length() > 0)
+ {
+ if (ulb.equalsIgnoreCase(FALSE_STRING))
+ {
+ clusterSettings.setURLLoadBalancing(false);
+ }
+ else if (!ulb.equalsIgnoreCase(TRUE_STRING))
+ {
+ ConfigurationException e = new ConfigurationException();
+ e.setMessage(10216, new Object[] {clusterName, ulb});
+ throw e;
+ }
+ }
+
+ NodeList properties = selectNodeList(cluster, PROPERTIES_ELEMENT + "/*");
+ if (properties.getLength() > 0)
+ {
+ ConfigMap map = properties(properties, getSourceFileOf(cluster));
+ clusterSettings.addProperties(map);
+ }
+
+ ((MessagingConfiguration)config).addClusterSettings(clusterSettings);
+
+ }
+ }
+ }
+
+
+ private void securitySection(Node root)
+ {
+ Node security = selectSingleNode(root, SECURITY_ELEMENT);
+
+ if (security == null)
+ return;
+
+ allowedChildElements(security, SECURITY_CHILDREN);
+
+ NodeList list = selectNodeList(security, SECURITY_CONSTRAINT_DEFINITION_ELEMENT);
+ for (int i = 0; i < list.getLength(); i++)
+ {
+ Node constraint = list.item(i);
+ securityConstraint(constraint, false);
+ }
+
+ list = selectNodeList(security, CONSTRAINT_INCLUDE_ELEMENT);
+ for (int i = 0; i < list.getLength(); i++)
+ {
+ Node include = list.item(i);
+ securityConstraintInclude(include);
+ }
+
+ list = selectNodeList(security, LOGIN_COMMAND_ELEMENT);
+ for (int i = 0; i < list.getLength(); i++)
+ {
+ Node login = list.item(i);
+ LoginCommandSettings loginCommandSettings= new LoginCommandSettings();
+
<TRUNCATED>