throws ParseException {
super(configProfile, ExtensionDescription.class);
String nsValue = attrs.getValue("", "namespace");
if (nsValue == null) {
throw new ParseException(
CoreErrorDomain.ERR.missingNamespace);
}
// Find the namespace in the list of declared NamespaceDescriptions.
// The attribute value can match either the alias or the uri
for (XmlNamespace declaredNs : namespaces) {
if (declaredNs.getAlias().equals(nsValue) ||
declaredNs.getUri().equals(nsValue)) {
namespace = declaredNs;
break;
}
}
if (namespace == null) {
ParseException pe = new ParseException(
CoreErrorDomain.ERR.missingNamespaceDescription);
pe.setInternalReason("No matching NamespaceDescription for " +
nsValue);
throw pe;
}
localName = attrs.getValue("", "localName");
if (localName == null) {
throw new ParseException(
CoreErrorDomain.ERR.missingLocalName);
}
String extensionClassName = attrs.getValue("", "extensionClass");
if (extensionClassName == null) {
throw new ParseException(
CoreErrorDomain.ERR.missingExtensionClass);
}
try {
Class<?> extClass = configLoader.loadClass(extensionClassName);
if (!Extension.class.isAssignableFrom(extClass)) {
throw new ParseException(
CoreErrorDomain.ERR.mustImplementExtension);
}
extensionClass = (Class<? extends Extension>) extClass;
} catch (ClassNotFoundException e) {
ParseException pe = new ParseException(
CoreErrorDomain.ERR.cantLoadExtensionClass, e);
pe.setInternalReason("Unable to load extensionClass: " +
extensionClassName);
throw pe;
}
Boolean bool = getBooleanAttribute(attrs, "required");