[Yanel-commits] rev 51908 -
public/yanel/trunk/src/core/java/org/wyona/yanel/core
michi at wyona.com
michi at wyona.com
Thu Jul 29 14:30:49 CEST 2010
Author: michi
Date: 2010-07-29 14:30:49 +0200 (Thu, 29 Jul 2010)
New Revision: 51908
Modified:
public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceTypeRegistry.java
Log:
load all resource definitions also from packages
Modified: public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceTypeRegistry.java
===================================================================
--- public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceTypeRegistry.java 2010-07-29 12:18:08 UTC (rev 51907)
+++ public/yanel/trunk/src/core/java/org/wyona/yanel/core/ResourceTypeRegistry.java 2010-07-29 12:30:49 UTC (rev 51908)
@@ -142,7 +142,7 @@
}
/**
- *
+ * Load/register resource types (e.g. from local/apache-tomcat-5.5.20/webapps/yanel/WEB-INF/classes/resource-types.xml)
*/
public void readResourceTypes() throws ConfigurationException {
try {
@@ -155,23 +155,45 @@
for (int i = 0; i < resourceTypes.length; i++) {
try {
- String packageName = resourceTypes[i].getAttribute("package");
- log.debug("Package: " + packageName);
- // TODO: Wildcard: resource*.xml !?
+ String packageName = resourceTypes[i].getAttribute("package"); // INFO: This method will throw an exception if no 'package' attribute exists, and hence further down it will try to read the 'src' attribute...
+ log.info("Package: " + packageName);
+
// TODO: Config itself, e.g. org/wyona/yanel/impl/resources/redirect/my-resource.xml
- URL resourceURL = ResourceTypeRegistry.class.getClassLoader().getResource(packageName.replace('.','/') + "/resource.xml");
- log.info("Resource config URL: " + resourceURL);
- try {
- ResourceTypeDefinition rtd = new ResourceTypeDefinition(resourceURL.openStream());
- log.debug("Universal Name: " + rtd.getResourceTypeUniversalName());
- log.debug("Classname: " + rtd.getResourceTypeClassname());
- hm.put(rtd.getResourceTypeUniversalName(), rtd);
- } catch (Exception exception) {
- log.error("Exception re registring resource with package '" + packageName + "' and resource definition URL '" + resourceURL + "'!");
- log.error(exception, exception);
+
+ URL packageURL = ResourceTypeRegistry.class.getClassLoader().getResource(packageName.replace('.','/'));
+ log.info("Package: " + packageURL.getFile());
+ File jarFile = new File(packageURL.getPath().substring(5, packageURL.getPath().indexOf("!")));
+ log.debug("Jar file: " + jarFile);
+ if (jarFile.isFile()) {
+ java.util.zip.ZipFile zipFile = new java.util.zip.ZipFile(jarFile);
+ java.util.Enumeration entries = zipFile.entries();
+ while (entries.hasMoreElements()) {
+ String entryName = ((java.util.zip.ZipEntry) entries.nextElement()).getName();
+ //log.debug("Entry: " + entryName);
+ if (entryName.indexOf("resource.xml") >= 0 || entryName.indexOf("resource-") >= 0) {
+ log.info("Resource definition: " + entryName);
+ URL resourceURL = ResourceTypeRegistry.class.getClassLoader().getResource(entryName);
+ //URL resourceURL = ResourceTypeRegistry.class.getClassLoader().getResource(packageName.replace('.','/') + "/resource.xml");
+ log.info("Resource config URL: " + resourceURL);
+ try {
+ ResourceTypeDefinition rtd = new ResourceTypeDefinition(resourceURL.openStream());
+ log.debug("Universal Name: " + rtd.getResourceTypeUniversalName());
+ log.debug("Classname: " + rtd.getResourceTypeClassname());
+ hm.put(rtd.getResourceTypeUniversalName(), rtd);
+ } catch (Exception exception) {
+ log.error("Exception re registring resource with package '" + packageName + "' and resource definition URL '" + resourceURL + "'!");
+ log.error(exception, exception);
+ }
+ }
+ }
+ } else {
+ log.error("No such file: " + jarFile);
}
} catch (Exception e) {
+ //log.error(e.getMessage()); // INFO: Do not show this error message, because it is not really an error in most cases
+ log.info("No package attribute, hence try src attribute...");
File resConfigFile = new File(resourceTypes[i].getAttribute("src"));
+ log.info("Source: " + resConfigFile);
if (!resConfigFile.isAbsolute()) {
resConfigFile = FileUtil.file(resourceTypeConfigFile.getParentFile().getAbsolutePath(), resourceTypes[i].getAttribute("src"));
}
More information about the Yanel-commits
mailing list