in webbeans-impl/src/main/java/org/apache/webbeans/xml/DefaultBeanArchiveService.java [463:540]
private void fillExcludes(DefaultBeanArchiveInformation bdaInfo, Element scanElement)
{
ClassLoader loader = Thread.currentThread().getContextClassLoader();
NodeList childNodes = scanElement.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++)
{
Node nd = childNodes.item(i);
if (!Element.class.isInstance(nd))
{
continue;
}
Element child = Element.class.cast(nd);
if (WebBeansConstants.WEB_BEANS_XML_EXCLUDE.equalsIgnoreCase(child.getLocalName()))
{
String name = getTrimmedAttribute(child, "name");
NodeList children = child.getChildNodes();
boolean skip = false;
for (int j = 0; j < children.getLength(); j++)
{
Node ndChild = children.item(j);
if (!Element.class.isInstance(ndChild))
{
continue;
}
Element condition = Element.class.cast(ndChild);
String localName = condition.getLocalName();
if (WebBeansConstants.WEB_BEANS_XML_IF_CLASS_AVAILABLE.equalsIgnoreCase(localName))
{
if (!isClassAvailable(loader, getTrimmedAttribute(condition, "name")))
{
skip = true;
break;
}
}
else if (WebBeansConstants.WEB_BEANS_XML_IF_CLASS_NOT_AVAILABLE.equalsIgnoreCase(localName))
{
if (isClassAvailable(loader, getTrimmedAttribute(condition, "name")))
{
skip = true;
break;
}
}
else if (WebBeansConstants.WEB_BEANS_XML_IF_SYSTEM_PROPERTY.equalsIgnoreCase(localName))
{
String value = getTrimmedAttribute(condition, "value");
String systProp = System.getProperty(getTrimmedAttribute(condition, "name"));
if ((value == null && systProp == null) || !(value != null && value.equals(systProp)))
{
skip = true;
break;
}
}
}
if (skip)
{
continue;
}
if (name.endsWith(".*"))
{
// package exclude without sub-packages
bdaInfo.addClassExclude(name.substring(0, name.length() - 2));
}
else if (name.endsWith(".**"))
{
// package exclude WITH sub-packages
bdaInfo.addPackageExclude(name.substring(0, name.length() - 3));
}
else
{
// a simple Class
bdaInfo.addClassExclude(name);
}
}
}
}