TagLibFactorypublic class TagLibFactory extends Object This is the factory class used for obtainig the TagLibDescriptor objects for
the tag libraries defined in the war archive. |
Fields Summary |
---|
private DocumentBuilder | builder | private com.sun.enterprise.tools.verifier.Context | context | private com.sun.enterprise.tools.verifier.FrameworkContext | frameworkContext | private Logger | logger | private boolean | uninitialised | private final com.sun.enterprise.util.LocalStringManagerImpl | smh |
Methods Summary |
---|
private org.w3c.dom.Document | createDocument(java.lang.String location, com.sun.enterprise.deployment.WebBundleDescriptor webd)Helper method to create the document object from the tld files specified
by the location in web.xml of the war archive.
Document document = null;
InputSource source = null;
if (location.startsWith("/")) // NOI18N
location = location.substring(1);
else
location = "WEB-INF/" + location; // NOI18N
ModuleDescriptor moduleDesc = webd.getModuleDescriptor();
String archBase = context.getAbstractArchive().getArchiveUri();
String uri = null;
if(moduleDesc.isStandalone()){
uri = archBase;
} else {
uri = archBase + File.separator +
FileUtils.makeFriendlyFileName(moduleDesc.getArchiveUri());
}
FileArchive arch = new FileArchive();
arch.open(uri);
InputStream is = arch.getEntry(location);
try {
// is can be null if wrong location of tld is specified in web.xml
if (is == null)
throw new IOException(smh.getLocalString
(getClass().getName() + ".exception1", // NOI18N
"Wrong tld [ {0} ] specified in the web.xml of [ {1} ]", // NOI18N
new Object[]{location, moduleDesc.getArchiveUri()}));
source = new InputSource(is);
document = builder.parse(source);
} finally {
try{
if(is != null)
is.close();
} catch(Exception e) {}
}
return document;
| private java.lang.String | getTLDSpecVersion(org.w3c.dom.Document doc)Returns the spec version of the tag lib descriptor file.
String str = null;
if (doc.getDoctype() != null) {
NodeList nl = doc.getElementsByTagName("jsp-version"); // NOI18N
if (nl != null && nl.getLength() != 0) {
str = nl.item(0).getFirstChild().getNodeValue(); // web-jsptaglib dtd vesion 1.2
} else {
nl = doc.getElementsByTagName("jspversion"); // NOI18N
if (nl.getLength() != 0) {
str = nl.item(0).getFirstChild().getNodeValue(); // web-jsptaglib dtd vesion 1.1
} else
return "1.1"; // NOI18N
}
} else
str = doc.getElementsByTagName("taglib").item(0).getAttributes() // NOI18N
.getNamedItem("version") // NOI18N
.getNodeValue();
return str;
| public com.sun.enterprise.tools.verifier.TagLibDescriptor[] | getTagLibDescriptors(com.sun.enterprise.deployment.WebBundleDescriptor descriptor)This method is responsible for creating a document object from the tld
files and then returning the array TagLibDescriptor objects based on tld
version.
ArrayList<TagLibDescriptor> tmp = new ArrayList<TagLibDescriptor>();
Enumeration taglibConfig = null;
if (descriptor.getJspConfigDescriptor() != null) {
taglibConfig = descriptor.getJspConfigDescriptor().getTagLibs();
} else {
return null;
}
init();
while (taglibConfig.hasMoreElements()) {
// test all the Tag lib descriptors.
TagLibConfigurationDescriptor taglibDescriptor = (TagLibConfigurationDescriptor) taglibConfig.nextElement();
String taglibLocation = taglibDescriptor.getTagLibLocation();
Document d = null;
try {
d = createDocument(taglibLocation, descriptor);
} catch (Exception e) {
logger.log(Level.WARNING, smh.getLocalString
(getClass().getName() + ".exception", // NOI18N
"Continuing, though problem in creating taglib document. Cause: {0}", // NOI18N
new Object[]{e.getMessage()}));
if (e instanceof SAXParseException) {
LogRecord logRecord = new LogRecord(Level.SEVERE,
smh.getLocalString
(getClass().getName() + ".exception2", // NOI18N
"XML Error line : {0} in [ {1} ]. {2}", // NOI18N
new Object[] {((SAXParseException) e).getLineNumber(),
taglibLocation,
e.getLocalizedMessage()}));
logRecord.setThrown(e);
frameworkContext.getResultManager().log(logRecord);
}
continue; // we are continuing with creating the next document.
}
String version = getTLDSpecVersion(d);
TagLibDescriptor taglib = null;
taglib = new TagLibDescriptor(d, version, taglibLocation);
tmp.add(taglib);
}
int count = tmp.size();
TagLibDescriptor arr[] = new TagLibDescriptor[count];
int i = 0;
for (Iterator e = tmp.iterator(); e.hasNext(); i++) {
arr[i] = (TagLibDescriptor) e.next();
}
return arr;
| private void | init()this method is called once to create the Documentbuilder required for
creating documen objects from tlds
if (!uninitialised) {
synchronized (this) {
if (!uninitialised) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
String W3C_XML_SCHEMA = "http://www.w3c.org/2001/XMLSchema"; // NOI18N
String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage"; // NOI18N
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute(
"http://apache.org/xml/features/validation/schema", // NOI18N
Boolean.TRUE);
factory.setAttribute(
"http://xml.org/sax/features/validation", // NOI18N
Boolean.TRUE);
factory.setAttribute(
"http://apache.org/xml/features/allow-java-encodings", // NOI18N
Boolean.TRUE);
factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
try {
builder = factory.newDocumentBuilder();
} catch (ParserConfigurationException e) {
logger.log(Level.SEVERE, e.getMessage());
}
EntityResolver dh = new XMLValidationHandler(true);
ErrorHandler eh = new XMLValidationHandler(true);
builder.setErrorHandler(eh);
builder.setEntityResolver(dh);
uninitialised = true;
}
}
}
|
|