package org.jboss.metadata;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;
import javax.management.MalformedObjectNameException;
import org.jboss.deployment.DeploymentException;
import org.jboss.logging.Logger;
import org.jboss.mx.loading.LoaderRepositoryFactory;
import org.jboss.mx.loading.LoaderRepositoryFactory.LoaderRepositoryConfig;
import org.jboss.mx.util.ObjectNameFactory;
import org.jboss.webservice.metadata.ServiceRefMetaData;
import org.jboss.security.RunAsIdentity;
import org.w3c.dom.Element;
public class WebMetaData extends MetaData
{
private static Logger log = Logger.getLogger(WebMetaData.class);
private HashMap servletMappings = new HashMap();
private HashMap resourceReferences = new HashMap();
private HashMap resourceEnvReferences = new HashMap();
private HashMap messageDestinationReferences = new HashMap();
private HashMap messageDestinations = new HashMap();
private ArrayList environmentEntries = new ArrayList();
private ArrayList securityContraints = new ArrayList();
private HashMap securityRoles = new HashMap();
private HashMap ejbReferences = new HashMap();
private HashMap ejbLocalReferences = new HashMap();
private HashMap serviceReferences = new HashMap();
private HashMap securityRoleReferences = new HashMap();
private HashMap runAsNames = new HashMap();
private HashMap runAsIdentity = new HashMap();
private boolean distributable = false;
private boolean java2ClassLoadingCompliance = false;
private LoaderRepositoryConfig loaderConfig;
private String contextRoot;
private String jaccContextID;
private ArrayList virtualHosts = new ArrayList();
private String securityDomain;
private boolean flushOnSessionInvalidation;
private HashMap wsdlPublishLocationMap = new HashMap();
private boolean webServiceDeployment;
private String[] filteredPackages;
private ClassLoader encLoader;
private ClassLoader cxtLoader;
private ArrayList depends = new ArrayList();
public static final int SESSION_INVALIDATE_ACCESS = 0;
public static final int SESSION_INVALIDATE_SET_AND_GET = 1;
public static final int SESSION_INVALIDATE_SET_AND_NON_PRIMITIVE_GET = 2;
public static final int SESSION_INVALIDATE_SET = 3;
private int invalidateSessionPolicy = SESSION_INVALIDATE_SET_AND_NON_PRIMITIVE_GET;
public static final int REPLICATION_TYPE_SYNC = 0;
public static final int REPLICATION_TYPE_ASYNC = 1;
private int replicationType = REPLICATION_TYPE_SYNC;
public static final int REPLICATION_GRANULARITY_SESSION = 0;
public static final int REPLICATION_GRANULARITY_ATTRIBUTE = 1;
public static final int REPLICATION_GRANULARITY_FIELD = 2;
private int replicationGranularity = REPLICATION_GRANULARITY_SESSION;
private int sessionCookies = SESSION_COOKIES_DEFAULT;
public static final int SESSION_COOKIES_DEFAULT = 0;
public static final int SESSION_COOKIES_ENABLED = 1;
public static final int SESSION_COOKIES_DISABLED = 2;
private URLClassLoader resourceCl;
public void setResourceClassLoader(URLClassLoader resourceCl)
{
this.resourceCl = resourceCl;
}
public Iterator getEnvironmentEntries()
{
return environmentEntries.iterator();
}
public void setEnvironmentEntries(Collection environmentEntries)
{
this.environmentEntries.clear();
this.environmentEntries.addAll(environmentEntries);
}
public Iterator getEjbReferences()
{
return ejbReferences.values().iterator();
}
public void setEjbReferences(Map ejbReferences)
{
this.ejbReferences.clear();
this.ejbReferences.putAll(ejbReferences);
}
public Iterator getEjbLocalReferences()
{
return ejbLocalReferences.values().iterator();
}
public void setEjbLocalReferences(Map ejbReferences)
{
this.ejbLocalReferences.clear();
this.ejbLocalReferences.putAll(ejbReferences);
}
public Iterator getResourceReferences()
{
return resourceReferences.values().iterator();
}
public void setResourceReferences(Map resourceReferences)
{
this.resourceReferences.clear();
this.resourceReferences.putAll(resourceReferences);
}
public Iterator getResourceEnvReferences()
{
return resourceEnvReferences.values().iterator();
}
public void setResourceEnvReferences(Map resourceReferences)
{
this.resourceEnvReferences.clear();
this.resourceEnvReferences.putAll(resourceReferences);
}
public Iterator getMessageDestinationReferences()
{
return messageDestinationReferences.values().iterator();
}
public void setMessageDestinationReferences(Map messageDestinationReferences)
{
this.messageDestinationReferences.clear();
this.messageDestinationReferences.putAll(messageDestinationReferences);
}
public MessageDestinationMetaData getMessageDestination(String name)
{
return (MessageDestinationMetaData)messageDestinations.get(name);
}
public void setMessageDestination(Map messageDestinations)
{
this.messageDestinations.clear();
this.messageDestinations.putAll(messageDestinations);
}
public Iterator getServiceReferences()
{
return serviceReferences.values().iterator();
}
public void setServiceReferences(Map serviceReferences)
{
this.serviceReferences.clear();
this.serviceReferences.putAll(serviceReferences);
}
public String getContextRoot()
{
return contextRoot;
}
public void setContextRoot(String contextRoot)
{
this.contextRoot = contextRoot;
}
public String getWsdlPublishLocationByName(String name)
{
return (String)wsdlPublishLocationMap.get(name);
}
public void setWsdlPublishLocationMap(Map wsdlPublishLocationMap)
{
this.wsdlPublishLocationMap.clear();
this.wsdlPublishLocationMap.putAll(wsdlPublishLocationMap);
}
public boolean isWebServiceDeployment()
{
return webServiceDeployment;
}
public void setWebServiceDeployment(boolean webServiceDeployment)
{
this.webServiceDeployment = webServiceDeployment;
}
public String getJaccContextID()
{
return jaccContextID;
}
public void setJaccContextID(String jaccContextID)
{
this.jaccContextID = jaccContextID;
}
public String getSecurityDomain()
{
return securityDomain;
}
public void setSecurityDomain(String securityDomain)
{
this.securityDomain = securityDomain;
}
public boolean isFlushOnSessionInvalidation()
{
return flushOnSessionInvalidation;
}
public void setFlushOnSessionInvalidation(boolean flag)
{
this.flushOnSessionInvalidation = flag;
}
public Iterator getSecurityContraints()
{
return securityContraints.iterator();
}
public void setSecurityConstraints(Collection securityContraints)
{
this.securityContraints.clear();
this.securityContraints.addAll(securityContraints);
}
public Map getSecurityRoleRefs()
{
return this.securityRoleReferences;
}
public void setSecurityRoleReferences(Map securityRoleReferences)
{
this.securityRoleReferences.clear();
this.securityRoleReferences.putAll(securityRoleReferences);
}
public Set getSecurityRoleNames()
{
return new HashSet(securityRoles.keySet());
}
public Map getSecurityRoles()
{
return new HashMap(securityRoles);
}
public void setSecurityRoles(Map securityRoles)
{
this.securityRoles.clear();
this.securityRoles.putAll(securityRoles);
}
public Set getSecurityRoleNamesByPrincipal(String userName)
{
HashSet roleNames = new HashSet();
Iterator it = securityRoles.values().iterator();
while (it.hasNext())
{
SecurityRoleMetaData srMetaData = (SecurityRoleMetaData)it.next();
if (srMetaData.getPrincipals().contains(userName))
roleNames.add(srMetaData.getRoleName());
}
return roleNames;
}
public RunAsIdentity getRunAsIdentity(String servletName)
{
RunAsIdentity runAs = (RunAsIdentity)runAsIdentity.get(servletName);
if (runAs == null)
{
synchronized (runAsIdentity)
{
String roleName = (String)runAsNames.get(servletName);
if (roleName != null)
{
runAs = new RunAsIdentity(roleName, null);
runAsIdentity.put(servletName, runAs);
}
}
}
return runAs;
}
public Map getRunAsIdentity()
{
return runAsIdentity;
}
public void setRunAsIdentity(Map runAsIdentity)
{
this.runAsIdentity.clear();
this.runAsIdentity.putAll(runAsIdentity);
}
public HashMap getServletMappings()
{
return servletMappings;
}
public void setServletMappings(Map servletMappings)
{
this.servletMappings.clear();
this.servletMappings.putAll(servletMappings);
}
public Set getServletNames()
{
return new HashSet(servletMappings.keySet());
}
public void mergeSecurityRoles(Map applRoles)
{
Iterator it = applRoles.entrySet().iterator();
while (it.hasNext())
{
Map.Entry entry = (Map.Entry)it.next();
String roleName = (String)entry.getKey();
SecurityRoleMetaData appRole = (SecurityRoleMetaData)entry.getValue();
SecurityRoleMetaData srMetaData = (SecurityRoleMetaData)securityRoles.get(roleName);
if (srMetaData != null)
{
Set principalNames = appRole.getPrincipals();
srMetaData.addPrincipalNames(principalNames);
}
else
{
securityRoles.put(roleName, entry.getValue());
}
}
}
public Iterator getVirtualHosts()
{
return virtualHosts.iterator();
}
public void setVirtualHosts(Collection virtualHosts)
{
this.virtualHosts.clear();
this.virtualHosts.addAll(virtualHosts);
}
public boolean getDistributable()
{
return distributable;
}
public void setDistributable(boolean distributable)
{
this.distributable = distributable;
}
public Collection getDepends()
{
return depends;
}
public void setDepends(Collection depends)
{
this.depends.clear();
this.depends.addAll(depends);
}
public boolean getJava2ClassLoadingCompliance()
{
return java2ClassLoadingCompliance;
}
public void setJava2ClassLoadingCompliance(boolean flag)
{
java2ClassLoadingCompliance = flag;
}
public LoaderRepositoryConfig getLoaderConfig()
{
return loaderConfig;
}
public void setLoaderConfig(LoaderRepositoryConfig loaderConfig)
{
this.loaderConfig = loaderConfig;
}
public ClassLoader getENCLoader()
{
return encLoader;
}
public void setENCLoader(ClassLoader encLoader)
{
this.encLoader = encLoader;
}
public ClassLoader getContextLoader()
{
return cxtLoader;
}
public void setContextLoader(ClassLoader cxtLoader)
{
this.cxtLoader = cxtLoader;
}
public int getSessionCookies()
{
return this.sessionCookies;
}
public void setSessionCookies(int sessionCookies)
{
this.sessionCookies = sessionCookies;
}
public int getInvalidateSessionPolicy()
{
return this.invalidateSessionPolicy;
}
public void setInvalidateSessionPolicy(int invalidateSessionPolicy)
{
this.invalidateSessionPolicy = invalidateSessionPolicy;
}
public int getReplicationType()
{
return replicationType;
}
public int getReplicationGranularity()
{
return replicationGranularity;
}
public void setReplicationGranularity(int replicationGranularity)
{
this.replicationGranularity = replicationGranularity;
}
public void importXml(Element element) throws DeploymentException
{
String rootTag = element.getOwnerDocument().getDocumentElement().getTagName();
if (rootTag.equals("web-app"))
{
importWebXml(element);
}
else if (rootTag.equals("jboss-web"))
{
importJBossWebXml(element);
}
}
protected void importWebXml(Element webApp) throws DeploymentException
{
Iterator iterator = getChildrenByTagName(webApp, "servlet");
while (iterator.hasNext())
{
Element servlet = (Element)iterator.next();
String servletName = getElementContent(getUniqueChild(servlet, "servlet-name"));
Iterator roleRefs = getChildrenByTagName(servlet, "security-role-ref");
ArrayList roleNames = new ArrayList();
while (roleRefs.hasNext())
{
Element roleRefElem = (Element)roleRefs.next();
SecurityRoleRefMetaData roleRef = new SecurityRoleRefMetaData();
roleRef.importEjbJarXml(roleRefElem);
roleNames.add(roleRef);
}
securityRoleReferences.put(servletName, roleNames);
Element runAs = getOptionalChild(servlet, "run-as");
if (runAs != null)
{
String runAsName = getElementContent(getOptionalChild(runAs, "role-name"));
runAsNames.put(servletName, runAsName);
}
}
iterator = getChildrenByTagName(webApp, "servlet-mapping");
while (iterator.hasNext())
{
Element servletMapping = (Element)iterator.next();
String servletName = getElementContent(getUniqueChild(servletMapping, "servlet-name"));
String urlPattern = getElementContent(getUniqueChild(servletMapping, "url-pattern"));
servletMappings.put(servletName, urlPattern);
}
iterator = getChildrenByTagName(webApp, "resource-ref");
while (iterator.hasNext())
{
Element resourceRef = (Element)iterator.next();
ResourceRefMetaData resourceRefMetaData = new ResourceRefMetaData();
resourceRefMetaData.importEjbJarXml(resourceRef);
resourceReferences.put(resourceRefMetaData.getRefName(), resourceRefMetaData);
}
iterator = getChildrenByTagName(webApp, "resource-env-ref");
while (iterator.hasNext())
{
Element resourceRef = (Element)iterator.next();
ResourceEnvRefMetaData refMetaData = new ResourceEnvRefMetaData();
refMetaData.importEjbJarXml(resourceRef);
resourceEnvReferences.put(refMetaData.getRefName(), refMetaData);
}
iterator = getChildrenByTagName(webApp, "message-destination-ref");
while (iterator.hasNext())
{
Element messageDestinationRef = (Element)iterator.next();
MessageDestinationRefMetaData messageDestinationRefMetaData = new MessageDestinationRefMetaData();
messageDestinationRefMetaData.importEjbJarXml(messageDestinationRef);
messageDestinationReferences.put(messageDestinationRefMetaData.getRefName(), messageDestinationRefMetaData);
}
iterator = getChildrenByTagName(webApp, "message-destination");
while (iterator.hasNext())
{
Element messageDestination = (Element)iterator.next();
try
{
MessageDestinationMetaData messageDestinationMetaData = new MessageDestinationMetaData();
messageDestinationMetaData.importEjbJarXml(messageDestination);
messageDestinations.put(messageDestinationMetaData.getName(), messageDestinationMetaData);
}
catch (Throwable t)
{
throw new DeploymentException("Error in web.xml " +
"for message destination: " + t.getMessage());
}
}
iterator = getChildrenByTagName(webApp, "env-entry");
while (iterator.hasNext())
{
Element envEntry = (Element)iterator.next();
EnvEntryMetaData envEntryMetaData = new EnvEntryMetaData();
envEntryMetaData.importEjbJarXml(envEntry);
environmentEntries.add(envEntryMetaData);
}
iterator = getChildrenByTagName(webApp, "security-constraint");
while (iterator.hasNext())
{
Element contraints = (Element)iterator.next();
WebSecurityMetaData wsmd = new WebSecurityMetaData();
securityContraints.add(wsmd);
Iterator iter2 = getChildrenByTagName(contraints, "web-resource-collection");
while (iter2.hasNext())
{
Element wrcElement = (Element)iter2.next();
Element wrName = getUniqueChild(wrcElement, "web-resource-name");
String name = getElementContent(wrName);
WebSecurityMetaData.WebResourceCollection wrc = wsmd.addWebResource(name);
Iterator iter21 = getChildrenByTagName(wrcElement, "url-pattern");
while (iter21.hasNext())
{
Element urlPattern = (Element)iter21.next();
String pattern = getElementContent(urlPattern);
wrc.addPattern(pattern);
}
Iterator iter22 = getChildrenByTagName(wrcElement, "http-method");
while (iter22.hasNext())
{
Element httpMethod = (Element)iter22.next();
String method = getElementContent(httpMethod);
wrc.addHttpMethod(method);
}
}
Element authContraint = getOptionalChild(contraints, "auth-constraint");
if (authContraint != null)
{
Iterator iter3 = getChildrenByTagName(authContraint, "role-name");
while (iter3.hasNext())
{
Element roleName = (Element)iter3.next();
String name = getElementContent(roleName);
wsmd.addRole(name);
}
if (wsmd.getRoles().size() == 0)
wsmd.setExcluded(true);
}
else
{
wsmd.setUnchecked(true);
}
Element userData = getOptionalChild(contraints, "user-data-constraint");
if (userData != null)
{
Element transport = getUniqueChild(userData, "transport-guarantee");
String type = getElementContent(transport);
wsmd.setTransportGuarantee(type);
}
}
iterator = getChildrenByTagName(webApp, "security-role");
while (iterator.hasNext())
{
Element securityRole = (Element)iterator.next();
String roleName = getElementContent(getUniqueChild(securityRole, "role-name"));
securityRoles.put(roleName, new SecurityRoleMetaData(roleName));
}
iterator = getChildrenByTagName(webApp, "ejb-ref");
while (iterator.hasNext())
{
Element ejbRef = (Element)iterator.next();
EjbRefMetaData ejbRefMetaData = new EjbRefMetaData();
ejbRefMetaData.importEjbJarXml(ejbRef);
ejbReferences.put(ejbRefMetaData.getName(), ejbRefMetaData);
}
iterator = getChildrenByTagName(webApp, "ejb-local-ref");
while (iterator.hasNext())
{
Element ejbRef = (Element)iterator.next();
EjbLocalRefMetaData ejbRefMetaData = new EjbLocalRefMetaData();
ejbRefMetaData.importEjbJarXml(ejbRef);
ejbLocalReferences.put(ejbRefMetaData.getName(), ejbRefMetaData);
}
iterator = MetaData.getChildrenByTagName(webApp, "service-ref");
while (iterator.hasNext())
{
Element serviceRef = (Element)iterator.next();
ServiceRefMetaData refMetaData = new ServiceRefMetaData(resourceCl);
refMetaData.importStandardXml(serviceRef);
serviceReferences.put(refMetaData.getServiceRefName(), refMetaData);
}
iterator = getChildrenByTagName(webApp, "distributable");
if (iterator.hasNext())
{
distributable = true;
}
}
protected void importJBossWebXml(Element jbossWeb) throws DeploymentException
{
Element contextRootElement = getOptionalChild(jbossWeb, "context-root");
if (contextRootElement != null)
contextRoot = getElementContent(contextRootElement);
Element securityDomainElement = getOptionalChild(jbossWeb, "security-domain");
if (securityDomainElement != null)
{
securityDomain = getElementContent(securityDomainElement);
Boolean flag = Boolean.valueOf(securityDomainElement.getAttribute("flushOnSessionInvalidation"));
flushOnSessionInvalidation = flag.booleanValue();
}
for (Iterator virtualHostElements = getChildrenByTagName(jbossWeb, "virtual-host");
virtualHostElements.hasNext();)
{
Element virtualHostElement = (Element)virtualHostElements.next();
String virtualHostName = getElementContent(virtualHostElement);
virtualHosts.add(virtualHostName);
}
Iterator iterator = getChildrenByTagName(jbossWeb, "resource-ref");
while (iterator.hasNext())
{
Element resourceRef = (Element)iterator.next();
String resRefName = getElementContent(getUniqueChild(resourceRef, "res-ref-name"));
ResourceRefMetaData refMetaData = (ResourceRefMetaData)resourceReferences.get(resRefName);
if (refMetaData == null)
{
throw new DeploymentException("resource-ref " + resRefName
+ " found in jboss-web.xml but not in web.xml");
}
refMetaData.importJbossXml(resourceRef);
}
iterator = getChildrenByTagName(jbossWeb, "resource-env-ref");
while (iterator.hasNext())
{
Element resourceRef = (Element)iterator.next();
String resRefName = getElementContent(getUniqueChild(resourceRef, "resource-env-ref-name"));
ResourceEnvRefMetaData refMetaData = (ResourceEnvRefMetaData)resourceEnvReferences.get(resRefName);
if (refMetaData == null)
{
throw new DeploymentException("resource-env-ref " + resRefName
+ " found in jboss-web.xml but not in web.xml");
}
refMetaData.importJbossXml(resourceRef);
}
iterator = getChildrenByTagName(jbossWeb, "message-destination-ref");
while (iterator.hasNext())
{
Element messageDestinationRef = (Element)iterator.next();
String messageDestinationRefName = getElementContent(getUniqueChild(messageDestinationRef, "message-destination-ref-name"));
MessageDestinationRefMetaData messageDestinationRefMetaData = (MessageDestinationRefMetaData)messageDestinationReferences.get(messageDestinationRefName);
if (messageDestinationRefMetaData == null)
throw new DeploymentException("message-destination-ref " + messageDestinationRefName + " found in jboss-web.xml but not in web.xml");
messageDestinationRefMetaData.importJbossXml(messageDestinationRef);
}
iterator = getChildrenByTagName(jbossWeb, "message-destination");
while (iterator.hasNext())
{
Element messageDestination = (Element)iterator.next();
try
{
String messageDestinationName = getUniqueChildContent(messageDestination, "message-destination-name");
MessageDestinationMetaData messageDestinationMetaData = (MessageDestinationMetaData)messageDestinations.get(messageDestinationName);
if (messageDestinationMetaData == null)
throw new DeploymentException("message-destination " + messageDestinationName + " found in jboss-web.xml but not in web.xml");
messageDestinationMetaData.importJbossXml(messageDestination);
}
catch (Throwable t)
{
throw new DeploymentException("Error in web.xml " +
"for message destination: " + t.getMessage());
}
}
iterator = getChildrenByTagName(jbossWeb, "security-role");
while (iterator.hasNext())
{
Element securityRole = (Element)iterator.next();
String roleName = getElementContent(getUniqueChild(securityRole, "role-name"));
SecurityRoleMetaData securityRoleMetaData = (SecurityRoleMetaData)securityRoles.get(roleName);
if (securityRoleMetaData == null)
throw new DeploymentException("Security role '" + roleName + "' defined in jboss-web.xml" +
" is not defined in web.xml");
Iterator itPrincipalNames = getChildrenByTagName(securityRole, "principal-name");
while (itPrincipalNames.hasNext())
{
String principalName = getElementContent((Element)itPrincipalNames.next());
securityRoleMetaData.addPrincipalName(principalName);
}
}
iterator = getChildrenByTagName(jbossWeb, "ejb-ref");
while (iterator.hasNext())
{
Element ejbRef = (Element)iterator.next();
String ejbRefName = getElementContent(getUniqueChild(ejbRef, "ejb-ref-name"));
EjbRefMetaData ejbRefMetaData = (EjbRefMetaData)ejbReferences.get(ejbRefName);
if (ejbRefMetaData == null)
{
throw new DeploymentException("ejb-ref " + ejbRefName
+ " found in jboss-web.xml but not in web.xml");
}
ejbRefMetaData.importJbossXml(ejbRef);
}
iterator = getChildrenByTagName(jbossWeb, "ejb-local-ref");
while (iterator.hasNext())
{
Element ejbLocalRef = (Element)iterator.next();
String ejbLocalRefName = getElementContent(getUniqueChild(ejbLocalRef, "ejb-ref-name"));
EjbLocalRefMetaData ejbLocalRefMetaData = (EjbLocalRefMetaData)ejbLocalReferences.get(ejbLocalRefName);
if (ejbLocalRefMetaData == null)
{
throw new DeploymentException("ejb-local-ref " + ejbLocalRefName
+ " found in jboss-web.xml but not in web.xml");
}
ejbLocalRefMetaData.importJbossXml(ejbLocalRef);
}
iterator = MetaData.getChildrenByTagName(jbossWeb, "service-ref");
while (iterator.hasNext())
{
Element serviceRef = (Element)iterator.next();
String serviceRefName = MetaData.getUniqueChildContent(serviceRef, "service-ref-name");
ServiceRefMetaData refMetaData = (ServiceRefMetaData)serviceReferences.get(serviceRefName);
if (refMetaData == null)
{
throw new DeploymentException("service-ref " + serviceRefName
+ " found in jboss-web.xml but not in web.xml");
}
refMetaData.importJBossXml(serviceRef);
}
iterator = getChildrenByTagName(jbossWeb, "webservice-description");
while (iterator.hasNext())
{
Element wsd = (Element)iterator.next();
String wsdName = getElementContent(getUniqueChild(wsd, "webservice-description-name"));
String wsdlPublishLocation = getOptionalChildContent(wsd, "wsdl-publish-location");
wsdlPublishLocationMap.put(wsdName, wsdlPublishLocation);
}
for (Iterator dependsElements = getChildrenByTagName(jbossWeb, "depends");
dependsElements.hasNext();)
{
Element dependsElement = (Element)dependsElements.next();
String dependsName = getElementContent(dependsElement);
depends.add(ObjectNameFactory.create(dependsName));
}
iterator = getChildrenByTagName(jbossWeb, "use-session-cookies");
if (iterator.hasNext())
{
Element useCookiesElement = (Element)iterator.next();
String useCookiesElementContent = getElementContent(useCookiesElement);
Boolean useCookies = Boolean.valueOf(useCookiesElementContent);
if (useCookies.booleanValue())
{
sessionCookies = SESSION_COOKIES_ENABLED;
}
else
{
sessionCookies = SESSION_COOKIES_DISABLED;
}
}
Element sessionReplicationRootElement = getOptionalChild(jbossWeb, "replication-config");
if (sessionReplicationRootElement != null)
{
Element replicationTriggerElement = getOptionalChild(sessionReplicationRootElement, "replication-trigger");
if (replicationTriggerElement != null)
{
String repMethod = getElementContent(replicationTriggerElement);
if ("SET_AND_GET".equalsIgnoreCase(repMethod))
this.invalidateSessionPolicy = SESSION_INVALIDATE_SET_AND_GET;
else if ("SET_AND_NON_PRIMITIVE_GET".equalsIgnoreCase(repMethod))
this.invalidateSessionPolicy = SESSION_INVALIDATE_SET_AND_NON_PRIMITIVE_GET;
else if ("SET".equalsIgnoreCase(repMethod))
this.invalidateSessionPolicy = SESSION_INVALIDATE_SET;
else
throw new DeploymentException("replication-trigger value set to a non-valid value: '" + repMethod
+ "' (should be ['SET_AND_GET', 'SET_AND_NON_PRIMITIVE_GET', 'SET']) in jboss-web.xml");
}
Element replicationTypeElement = getOptionalChild(sessionReplicationRootElement, "replication-type");
if (replicationTypeElement != null)
{
String repType = getElementContent(replicationTypeElement);
if ("SYNC".equalsIgnoreCase(repType))
this.replicationType = REPLICATION_TYPE_SYNC;
else if ("ASYNC".equalsIgnoreCase(repType))
this.replicationType = REPLICATION_TYPE_ASYNC;
else
throw new DeploymentException("replication-type value set to a non-valid value: '" + repType
+ "' (should be ['SYNC', 'ASYNC']) in jboss-web.xml");
}
Element replicationGranularityElement = MetaData.getOptionalChild(sessionReplicationRootElement, "replication-granularity");
if (replicationGranularityElement != null)
{
String repType = MetaData.getElementContent(replicationGranularityElement);
if ("SESSION".equalsIgnoreCase(repType))
this.replicationGranularity = REPLICATION_GRANULARITY_SESSION;
else if ("ATTRIBUTE".equalsIgnoreCase(repType))
this.replicationGranularity = REPLICATION_GRANULARITY_ATTRIBUTE;
else
throw new DeploymentException("replication-granularity value set to a non-valid value: '" + repType
+ "' (should be ['SESSION', 'ATTRIBUTE']) in jboss-web.xml");
}
}
Element classLoading = MetaData.getOptionalChild(jbossWeb, "class-loading");
if (classLoading != null)
{
String flagString = classLoading.getAttribute("java2ClassLoadingCompliance");
if (flagString.length() == 0)
flagString = "true";
boolean flag = Boolean.valueOf(flagString).booleanValue();
setJava2ClassLoadingCompliance(flag);
Element loader = MetaData.getOptionalChild(classLoading, "loader-repository");
if (loader != null)
{
try
{
loaderConfig = LoaderRepositoryFactory.parseRepositoryConfig(loader);
}
catch (MalformedObjectNameException e)
{
throw new DeploymentException(e);
}
}
}
iterator = getChildrenByTagName(jbossWeb, "servlet");
while (iterator.hasNext())
{
Element servlet = (Element)iterator.next();
String servletName = getElementContent(getUniqueChild(servlet, "servlet-name"));
String principalName = getOptionalChildContent(servlet, "run-as-principal");
String webXmlRunAs = (String)runAsNames.get(servletName);
if (principalName != null)
{
if (webXmlRunAs == null)
{
throw new DeploymentException("run-as-principal: " + principalName
+ " found in jboss-web.xml but there was no run-as in web.xml");
}
Set extraRoles = getSecurityRoleNamesByPrincipal(principalName);
RunAsIdentity runAs = new RunAsIdentity(webXmlRunAs, principalName, extraRoles);
runAsIdentity.put(servletName, runAs);
}
else if (webXmlRunAs != null)
{
RunAsIdentity runAs = new RunAsIdentity(webXmlRunAs, null);
runAsIdentity.put(servletName, runAs);
}
}
}
}