[Yanel-commits] rev 33255 -
public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet
michi at wyona.com
michi at wyona.com
Tue Mar 11 15:00:03 CET 2008
Author: michi
Date: 2008-03-11 15:00:02 +0100 (Tue, 11 Mar 2008)
New Revision: 33255
Modified:
public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
Log:
use source resolvers instead direct file access
Modified: public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java
===================================================================
--- public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java 2008-03-11 13:59:14 UTC (rev 33254)
+++ public/yanel/trunk/src/webapp/src/java/org/wyona/yanel/servlet/YanelServlet.java 2008-03-11 14:00:02 UTC (rev 33255)
@@ -25,6 +25,7 @@
import javax.servlet.http.HttpSession;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
+import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
@@ -57,6 +58,7 @@
import org.wyona.yanel.core.navigation.Node;
import org.wyona.yanel.core.navigation.Sitetree;
import org.wyona.yanel.core.serialization.SerializerFactory;
+import org.wyona.yanel.core.source.SourceResolver;
import org.wyona.yanel.core.transformation.I18nTransformer2;
import org.wyona.yanel.core.util.DateUtil;
import org.wyona.yanel.core.workflow.WorkflowException;
@@ -1925,28 +1927,30 @@
String[] pathPart3 = pathPart2[1].split("/");
String name = pathPart3[0];
String namespace = pathPart2[0].replaceAll("http:/", "http://");
- String htdocsPath;
- if (pathPart2[1].indexOf("/" + reservedPrefix + "/") >= 0) {
- htdocsPath = "yanel-htdocs" + path.split("::" + name)[1].split("/" + reservedPrefix)[1].replace('/', File.separatorChar);
- } else {
- htdocsPath = "htdocs" + path.split("::" + name)[1].replace('/', File.separatorChar);
- }
try {
java.util.Map properties = new HashMap();
Realm realm = yanel.getMap().getRealm(request.getServletPath());
ResourceConfiguration rc = new ResourceConfiguration(name, namespace, properties);
Resource resourceOfPrefix = yanel.getResourceManager().getResource(getEnvironment(request, response), realm, path, rc);
- File resourceFile = org.wyona.commons.io.FileUtil.file(resourceOfPrefix.getRTD().getConfigFile().getParentFile().getAbsolutePath(), htdocsPath);
-
- if (resourceFile.exists()) {
- log.debug("Resource-Type specific data: " + resourceFile);
+ String htdocsPath;
+ if (pathPart2[1].indexOf("/" + reservedPrefix + "/") >= 0) {
+ htdocsPath = "rtyanelhtdocs:" + path.split("::" + name)[1].split("/" + reservedPrefix)[1].replace('/', File.separatorChar);
+ } else {
+ htdocsPath = "rthtdocs:" + path.split("::" + name)[1].replace('/', File.separatorChar);
+ }
+ SourceResolver resolver = new SourceResolver(resourceOfPrefix);
+ Source source = resolver.resolve(htdocsPath, null);
+ InputStream htodoc = ((StreamSource) source).getInputStream();
+
+ if (htodoc != null) {
+ log.debug("Resource-Type specific data: " + htdocsPath);
// TODO: Set HTTP header (mime-type, size, etc.)
- String mimeType = guessMimeType(FilenameUtils.getExtension(resourceFile.getName()));
+ String mimeType = guessMimeType(FilenameUtils.getExtension(FilenameUtils.getName(htdocsPath)));
response.setHeader("Content-Type", mimeType);
byte buffer[] = new byte[8192];
int bytesRead;
- InputStream in = new java.io.FileInputStream(resourceFile);
+ InputStream in = htodoc;
OutputStream out = response.getOutputStream();
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
@@ -1957,7 +1961,7 @@
}
return;
} else {
- log.error("No such file or directory: " + resourceFile);
+ log.error("No such file or directory: " + htdocsPath);
response.setStatus(javax.servlet.http.HttpServletResponse.SC_NOT_FOUND);
return;
}
More information about the Yanel-commits
mailing list