From: <wol...@us...> - 2008-10-10 21:26:06
|
Revision: 8227 http://exist.svn.sourceforge.net/exist/?rev=8227&view=rev Author: wolfgang_m Date: 2008-10-10 21:26:02 +0000 (Fri, 10 Oct 2008) Log Message: ----------- [bugfix] XQueryURLRewrite servlet filter should not try to parse multi-part requests; the data should be passed on to the final receiver. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2008-10-09 00:40:37 UTC (rev 8226) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2008-10-10 21:26:02 UTC (rev 8227) @@ -284,7 +284,7 @@ urlCache.put(request.getRequestURI(), rewrite); } } - + LOG.debug("REQUEST: " + request.getClass().getName()); if (rewrite == null) throw new ServletException("No URL rewrite rule found! Giving up."); rewrite.doRewrite(request, response, filterChain); @@ -379,7 +379,7 @@ private void declareVariables(XQueryContext context, HttpServletRequest request, HttpServletResponse response) throws XPathException { - HttpRequestWrapper reqw = new HttpRequestWrapper(request, "UTF-8", "UTF-8"); + HttpRequestWrapper reqw = new HttpRequestWrapper(request, "UTF-8", "UTF-8", false); HttpResponseWrapper respw = new HttpResponseWrapper(response); // context.declareNamespace(RequestModule.PREFIX, // RequestModule.NAMESPACE_URI); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2008-10-21 14:10:59
|
Revision: 8256 http://exist.svn.sourceforge.net/exist/?rev=8256&view=rev Author: wolfgang_m Date: 2008-10-21 14:10:49 +0000 (Tue, 21 Oct 2008) Log Message: ----------- [bugfix] avoid NullPointerException in XQueryURLRewrite. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2008-10-21 12:49:41 UTC (rev 8255) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2008-10-21 14:10:49 UTC (rev 8256) @@ -346,6 +346,8 @@ private Sequence runQuery(DBBroker broker, HttpServletRequest request, HttpServletResponse response) throws ServletException, XPathException { // Try to find the XQuery String qpath = config.getServletContext().getRealPath(query); + if (qpath == null) + qpath = query; File f = new File(qpath); if (!(f.canRead() && f.isFile())) throw new ServletException("Cannot read XQuery source from " + f.getAbsolutePath()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-01-27 22:43:05
|
Revision: 8534 http://exist.svn.sourceforge.net/exist/?rev=8534&view=rev Author: wolfgang_m Date: 2009-01-27 21:59:55 +0000 (Tue, 27 Jan 2009) Log Message: ----------- [ignore] XQueryURLRewrite produces too much log output in debug mode, which costs performance during normal operations. Switch log priority for some messages to trace. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-01-26 18:00:20 UTC (rev 8533) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-01-27 21:59:55 UTC (rev 8534) @@ -216,7 +216,8 @@ } } - LOG.debug(request.getRequestURI()); + if (LOG.isTraceEnabled()) + LOG.trace(request.getRequestURI()); try { configure(); @@ -308,8 +309,8 @@ urlCache.put(request.getRequestURI(), modelView); } } - if (LOG.isDebugEnabled()) - LOG.debug("URLRewrite took " + (System.currentTimeMillis() - start) + "ms."); + if (LOG.isTraceEnabled()) + LOG.trace("URLRewrite took " + (System.currentTimeMillis() - start) + "ms."); HttpServletResponse wrappedResponse = response; if (modelView.hasViews()) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-10-30 17:20:07
|
Revision: 10293 http://exist.svn.sourceforge.net/exist/?rev=10293&view=rev Author: wolfgang_m Date: 2009-10-30 17:20:00 +0000 (Fri, 30 Oct 2009) Log Message: ----------- [bugfix] Fixed another NPE in XQueryURLRewrite Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-10-30 13:38:36 UTC (rev 10292) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-10-30 17:20:00 UTC (rev 10293) @@ -573,7 +573,6 @@ Collection collection = broker.openCollection(locationUri, Lock.READ_LOCK); if (collection == null) { LOG.warn("Controller base collection not found: " + basePath); - collection.getLock().release(Lock.READ_LOCK); return null; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-11-02 18:20:49
|
Revision: 10328 http://exist.svn.sourceforge.net/exist/?rev=10328&view=rev Author: wolfgang_m Date: 2009-11-02 18:20:39 +0000 (Mon, 02 Nov 2009) Log Message: ----------- [bugfix] XQueryURLRewrite: fixed NPE occurring with tomcat. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-11-02 15:11:58 UTC (rev 10327) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-11-02 18:20:39 UTC (rev 10328) @@ -233,9 +233,9 @@ } // check if the request URI is already in the url cache - ModelAndView modelView = null; + ModelAndView modelView; synchronized (urlCache) { - urlCache.get(modifiedRequest.getRequestURI()); + modelView = urlCache.get(modifiedRequest.getRequestURI()); } // no: create a new model and view configuration if (modelView == null) { @@ -815,7 +815,6 @@ } contentType = request.getContentType(); - servletPath = request.getServletPath(); } public String getRequestURI() { @@ -871,17 +870,25 @@ * @param base the base path to remove */ public void removePathPrefix(String base) { - setPaths(getInContextPath().substring(base.length()), servletPath.substring(base.length())); + setPaths(getInContextPath().substring(base.length()), + servletPath != null ? servletPath.substring(base.length()) : null); } public String getServletPath() { - return servletPath; + return servletPath == null ? super.getServletPath() : servletPath; } public String getPathInfo() { String path = getInContextPath(); - return path.length() == servletPath.length() ? null : path.substring(servletPath.length()); - } + String sp = getServletPath(); + if (sp == null) + return null; + if (path.length() < sp.length()) { + LOG.error("Internal error: servletPath = " + sp + " is longer than path = " + path); + return null; + } + return path.length() == sp.length() ? null : path.substring(sp.length()); + } protected void setData(byte[] data) { if (data == null) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2010-02-08 10:29:37
|
Revision: 11157 http://exist.svn.sourceforge.net/exist/?rev=11157&view=rev Author: wolfgang_m Date: 2010-02-08 10:29:31 +0000 (Mon, 08 Feb 2010) Log Message: ----------- [bugfix] fix for bug 2937563: Bug preventing relative module imports in controller.xql http://sourceforge.net/tracker/?func=detail&aid=2937563&group_id=17691&atid=117691 Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2010-02-08 10:21:14 UTC (rev 11156) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2010-02-08 10:29:31 UTC (rev 11157) @@ -545,7 +545,7 @@ queryContext = compiled.getContext(); } // Find correct module load path - queryContext.setModuleLoadPath(moduleLoadPath); + queryContext.setModuleLoadPath(sourceInfo.moduleLoadPath); declareVariables(queryContext, sourceInfo, staticRewrite, basePath, request, response); if (compiled == null) { try { @@ -635,8 +635,9 @@ "declares a wrong mime-type"); return null; } - sourceInfo = new SourceInfo(new DBSource(broker, (BinaryDocument) controllerDoc, true)); String controllerPath = controllerDoc.getCollection().getURI().getRawCollectionPath(); + sourceInfo = new SourceInfo(new DBSource(broker, (BinaryDocument) controllerDoc, true), + "xmldb:exist://" + controllerPath); sourceInfo.controllerPath = controllerPath.substring(locationUri.getCollectionPath().length()); return sourceInfo; @@ -680,8 +681,8 @@ } if (LOG.isTraceEnabled()) LOG.trace("Found controller file: " + controllerFile.getAbsolutePath()); - sourceInfo = new SourceInfo(new FileSource(controllerFile, "UTF-8", true)); String parentPath = controllerFile.getParentFile().getAbsolutePath(); + sourceInfo = new SourceInfo(new FileSource(controllerFile, "UTF-8", true), parentPath); sourceInfo.controllerPath = parentPath.substring(baseDir.getAbsolutePath().length()); // replace windows path separators @@ -705,7 +706,8 @@ !sourceDoc.getMetadata().getMimeType().equals("application/xquery")) throw new ServletException("XQuery resource: " + query + " is not an XQuery or " + "declares a wrong mime-type"); - sourceInfo = new SourceInfo(new DBSource(broker, (BinaryDocument) sourceDoc, true)); + sourceInfo = new SourceInfo(new DBSource(broker, (BinaryDocument) sourceDoc, true), + locationUri.toString()); } catch (PermissionDeniedException e) { throw new ServletException("permission denied to read module source from " + query); } finally { @@ -717,7 +719,8 @@ } } else { try { - sourceInfo = new SourceInfo(SourceFactory.getSource(broker, moduleLoadPath, query, true)); + sourceInfo = new SourceInfo(SourceFactory.getSource(broker, moduleLoadPath, query, true), + moduleLoadPath); } catch (IOException e) { throw new ServletException("IO error while reading XQuery source: " + query); } catch (PermissionDeniedException e) { @@ -803,9 +806,11 @@ Source source; String controllerPath = ""; + String moduleLoadPath; - private SourceInfo(Source source) { + private SourceInfo(Source source, String moduleLoadPath) { this.source = source; + this.moduleLoadPath = moduleLoadPath; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2011-01-04 12:04:51
|
Revision: 13501 http://exist.svn.sourceforge.net/exist/?rev=13501&view=rev Author: gev Date: 2011-01-04 12:04:45 +0000 (Tue, 04 Jan 2011) Log Message: ----------- [bugfix] initialize output properties before Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2011-01-04 11:15:39 UTC (rev 13500) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2011-01-04 12:04:45 UTC (rev 13501) @@ -58,7 +58,9 @@ import org.exist.storage.DBBroker; import org.exist.storage.XQueryPool; import org.exist.storage.lock.Lock; +import org.exist.storage.serializers.EXistOutputKeys; import org.exist.storage.serializers.Serializer; +import org.exist.util.MimeType; import org.exist.util.serializer.SAXSerializer; import org.exist.util.serializer.SerializerPool; import org.exist.http.servlets.HttpRequestWrapper; @@ -246,6 +248,10 @@ Properties outputProperties = new Properties(); + outputProperties.setProperty(OutputKeys.INDENT, "yes"); + outputProperties.setProperty(OutputKeys.ENCODING, "UTF-8"); + outputProperties.setProperty(OutputKeys.MEDIA_TYPE, MimeType.XML_TYPE.getName()); + result = runQuery(broker, modifiedRequest, response, staticRewrite, outputProperties); logResult(broker, result); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ge...@us...> - 2011-01-10 09:22:33
|
Revision: 13522 http://exist.svn.sourceforge.net/exist/?rev=13522&view=rev Author: gev Date: 2011-01-10 09:22:27 +0000 (Mon, 10 Jan 2011) Log Message: ----------- [ignore] cleanup Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2011-01-09 20:29:51 UTC (rev 13521) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2011-01-10 09:22:27 UTC (rev 13522) @@ -420,7 +420,7 @@ String encoding = outputProperties.getProperty(OutputKeys.ENCODING); ServletOutputStream sout = response.getOutputStream(); PrintWriter output = new PrintWriter(new OutputStreamWriter(sout, encoding)); - if (!((HttpServletResponse) response).containsHeader("Content-Type")){ + if (!response.containsHeader("Content-Type")){ String mimeType = outputProperties.getProperty(OutputKeys.MEDIA_TYPE); if (mimeType != null) { int semicolon = mimeType.indexOf(';'); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2011-05-06 07:47:53
|
Revision: 14382 http://exist.svn.sourceforge.net/exist/?rev=14382&view=rev Author: wolfgang_m Date: 2011-05-06 07:47:47 +0000 (Fri, 06 May 2011) Log Message: ----------- [bugfix] XQueryURLRewrite: again intercept the "If-Modified-Since" header, but ONLY if views are applied to the request. Without this, changes in views are not detected. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2011-05-06 07:43:47 UTC (rev 14381) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2011-05-06 07:47:47 UTC (rev 14382) @@ -340,6 +340,7 @@ else modelView.getModel().setAbsolutePath(modifiedRequest); } + modifiedRequest.allowCaching(!modelView.hasViews()); doRewrite(modelView.getModel(), modifiedRequest, wrappedResponse, filterChain); int status = ((CachingResponseWrapper) wrappedResponse).getStatus(); @@ -391,6 +392,7 @@ URLRewrite view = (URLRewrite) views.get(i); RequestWrapper wrappedReq = new RequestWrapper(modifiedRequest); + wrappedReq.allowCaching(false); wrappedReq.setMethod("POST"); wrappedReq.setCharacterEncoding(wrappedResponse.getCharacterEncoding()); wrappedReq.setContentType(wrappedResponse.getContentType()); @@ -983,6 +985,7 @@ String inContextPath = null; String servletPath; String basePath = null; + boolean allowCaching = true; private void addNameValue(String name, String value, Map<String, List<String>> map) { List<String> values = map.get(name); @@ -1012,6 +1015,10 @@ contentType = request.getContentType(); } + protected void allowCaching(boolean cache) { + this.allowCaching = cache; + } + @Override public String getRequestURI() { return inContextPath == null ? super.getRequestURI() : getContextPath() + inContextPath; @@ -1186,15 +1193,15 @@ @Override public String getHeader(String s) { - /*if (s.equals("If-Modified-Since")) - return null;*/ + if (s.equals("If-Modified-Since") && !allowCaching) + return null; return super.getHeader(s); } @Override public long getDateHeader(String s) { - /*if (s.equals("If-Modified-Since")) - return -1;*/ + if (s.equals("If-Modified-Since") && !allowCaching) + return -1; return super.getDateHeader(s); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2012-01-29 16:56:18
|
Revision: 15762 http://exist.svn.sourceforge.net/exist/?rev=15762&view=rev Author: wolfgang_m Date: 2012-01-29 16:56:12 +0000 (Sun, 29 Jan 2012) Log Message: ----------- [bugfix] RequestWrapper.getPathTranslated() returned path of original, not rewritten request. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2012-01-29 16:28:15 UTC (rev 15761) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2012-01-29 16:56:12 UTC (rev 15762) @@ -1142,6 +1142,11 @@ return path.length() == sp.length() ? null : path.substring(sp.length()); } + @Override + public String getPathTranslated() { + return super.getRealPath(getPathInfo()); + } + protected void setData(byte[] data) { if (data == null) data = new byte[0]; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2012-02-22 14:42:32
|
Revision: 15964 http://exist.svn.sourceforge.net/exist/?rev=15964&view=rev Author: wolfgang_m Date: 2012-02-22 14:42:21 +0000 (Wed, 22 Feb 2012) Log Message: ----------- [ignore] Rev 15963 introduces other issues. One more try... Revision Links: -------------- http://exist.svn.sourceforge.net/exist/?rev=15963&view=rev Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2012-02-22 14:31:00 UTC (rev 15963) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2012-02-22 14:42:21 UTC (rev 15964) @@ -1148,7 +1148,7 @@ public String getPathTranslated() { String pathInfo = getPathInfo(); if (pathInfo == null) - pathInfo = "."; + super.getPathTranslated(); return super.getSession().getServletContext().getRealPath(pathInfo); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-05-09 15:10:30
|
Revision: 8993 http://exist.svn.sourceforge.net/exist/?rev=8993&view=rev Author: wolfgang_m Date: 2009-05-09 15:10:16 +0000 (Sat, 09 May 2009) Log Message: ----------- [bugfix] fixed concurrent access conflicts: XQueryContext was shared in XQueryURLRewrite. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-05-09 14:36:07 UTC (rev 8992) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-05-09 15:10:16 UTC (rev 8993) @@ -187,7 +187,6 @@ private User user; private BrokerPool pool; - private XQueryContext queryContext; // path to the query private String query = null; @@ -323,7 +322,7 @@ if (modelView.useCache()) { urlCache.put(request.getRequestURI(), modelView); } - } + } if (LOG.isTraceEnabled()) LOG.trace("URLRewrite took " + (System.currentTimeMillis() - start) + "ms."); @@ -358,6 +357,7 @@ wrappedResponse.flushBuffer(); } } else { + // HTTP response code indicates an error byte[] data = ((CachingResponseWrapper) wrappedResponse).getData(); if (data != null) { response.setContentType(wrappedResponse.getContentType()); @@ -449,7 +449,6 @@ public void destroy() { config = null; - queryContext = null; } private Sequence runQuery(DBBroker broker, HttpServletRequest request, HttpServletResponse response) throws ServletException, XPathException { @@ -490,6 +489,7 @@ XQuery xquery = broker.getXQueryService(); XQueryPool pool = xquery.getXQueryPool(); CompiledXQuery compiled = pool.borrowCompiledXQuery(broker, source); + XQueryContext queryContext; if (compiled == null) { queryContext = xquery.newContext(AccessContext.REST); } else { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-05-28 07:00:53
|
Revision: 9078 http://exist.svn.sourceforge.net/exist/?rev=9078&view=rev Author: wolfgang_m Date: 2009-05-28 07:00:49 +0000 (Thu, 28 May 2009) Log Message: ----------- [ignore] XQueryURLRewrite: for debugging purposes, log original request uri if trace log is enabled. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-05-28 06:59:12 UTC (rev 9077) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-05-28 07:00:49 UTC (rev 9078) @@ -253,6 +253,8 @@ } } + if (LOG.isTraceEnabled()) + LOG.trace("Processing request URI: " + request.getRequestURI()); RequestWrapper modifiedRequest = new RequestWrapper(request); // check if the request URI is already in the url cache ModelAndView modelView = (ModelAndView) urlCache.get(request.getRequestURI()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-07-07 20:05:28
|
Revision: 9275 http://exist.svn.sourceforge.net/exist/?rev=9275&view=rev Author: wolfgang_m Date: 2009-07-07 20:05:22 +0000 (Tue, 07 Jul 2009) Log Message: ----------- [bugfix] XQueryURLRewrite interpreted a "403 NOT MODIFIED" response from the webserver as an error. This caused some caching problems. Changes in XSL stylesheets that were used in a rewrite rule were not detected. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-07-07 16:52:46 UTC (rev 9274) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-07-07 20:05:22 UTC (rev 9275) @@ -321,7 +321,7 @@ if (modelView.hasViews()) { int status = ((CachingResponseWrapper) wrappedResponse).getStatus(); - if (status < 300) { + if (status < 400) { List views = modelView.views; for (int i = 0; i < views.size(); i++) { URLRewrite view = (URLRewrite) views.get(i); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-07-07 22:35:12
|
Revision: 9276 http://exist.svn.sourceforge.net/exist/?rev=9276&view=rev Author: wolfgang_m Date: 2009-07-07 22:35:10 +0000 (Tue, 07 Jul 2009) Log Message: ----------- [bugfix] browser caching issues: XQueryURLRewrite needs to intercept If-Modified-Since. We don't know that no part of the pipeline has changed. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-07-07 20:05:22 UTC (rev 9275) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-07-07 22:35:10 UTC (rev 9276) @@ -765,7 +765,19 @@ return characterEncoding; } -// public void setAttribute(String key, Object value) { + public String getHeader(String s) { + if (s.equals("If-Modified-Since")) + return null; + return super.getHeader(s); + } + + public long getDateHeader(String s) { + if (s.equals("If-Modified-Since")) + return -1; + return super.getDateHeader(s); + } + + // public void setAttribute(String key, Object value) { // attributes.put(key, value); // } // This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-09-03 12:47:54
|
Revision: 9993 http://exist.svn.sourceforge.net/exist/?rev=9993&view=rev Author: wolfgang_m Date: 2009-09-03 12:47:33 +0000 (Thu, 03 Sep 2009) Log Message: ----------- [bugfix] XQueryURLRewrite: if the first step in the pipeline returns a 304 NOT MODIFIED, skip the remaining steps and return. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-09-02 23:17:53 UTC (rev 9992) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-09-03 12:47:33 UTC (rev 9993) @@ -322,7 +322,9 @@ if (modelView.hasViews()) { int status = ((CachingResponseWrapper) wrappedResponse).getStatus(); - if (status < 400) { + if (status == HttpServletResponse.SC_NOT_MODIFIED) { + response.flushBuffer(); + } else if (status < 400) { List views = modelView.views; for (int i = 0; i < views.size(); i++) { URLRewrite view = (URLRewrite) views.get(i); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-09-15 20:43:14
|
Revision: 10040 http://exist.svn.sourceforge.net/exist/?rev=10040&view=rev Author: wolfgang_m Date: 2009-09-15 20:43:01 +0000 (Tue, 15 Sep 2009) Log Message: ----------- [bugfix] XQueryURLRewrite acquired a lock on a collection containing the controller.xql, but failed to properly release it afterwards. The lock kept blocking other queries/operations, including shutdown. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-09-15 17:48:09 UTC (rev 10039) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-09-15 20:43:01 UTC (rev 10040) @@ -491,29 +491,30 @@ Collection subColl = collection; DocumentImpl controllerDoc = null; for (int i = 0; i < components.length; i++) { - if (components[i].length() > 0) { - if (subColl.hasChildCollection(XmldbURI.createInternal(components[i]))) { - DocumentImpl doc = null; - try { - subColl = broker.openCollection(subColl.getURI().append(components[i]), Lock.READ_LOCK); - if (subColl != null) { - XmldbURI docUri = subColl.getURI().append("controller.xql"); - doc = broker.getXMLResource(docUri, Lock.READ_LOCK); - if (doc != null) - controllerDoc = doc; - } else - break; - } catch (PermissionDeniedException e) { - LOG.debug("Permission denied while scanning for XQueryURLRewrite controllers: " + - e.getMessage(), e); - } finally { + if (components[i].length() > 0 && subColl.hasChildCollection(XmldbURI.createInternal(components[i]))) { + DocumentImpl doc = null; + try { + subColl = broker.openCollection(subColl.getURI().append(components[i]), Lock.READ_LOCK); + if (subColl != null) { + XmldbURI docUri = subColl.getURI().append("controller.xql"); + doc = broker.getXMLResource(docUri, Lock.READ_LOCK); if (doc != null) - doc.getUpdateLock().release(Lock.READ_LOCK); - if (subColl != null) - subColl.getLock().release(Lock.READ_LOCK); - } - } else - break; + controllerDoc = doc; + } else + break; + } catch (PermissionDeniedException e) { + LOG.debug("Permission denied while scanning for XQueryURLRewrite controllers: " + + e.getMessage(), e); + } finally { + if (doc != null) + doc.getUpdateLock().release(Lock.READ_LOCK); + if (subColl != null) + subColl.getLock().release(Lock.READ_LOCK); + } + } else { + if (subColl != null) + subColl.getLock().release(Lock.READ_LOCK); + break; } } if (controllerDoc == null) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-09-29 14:01:04
|
Revision: 10169 http://exist.svn.sourceforge.net/exist/?rev=10169&view=rev Author: wolfgang_m Date: 2009-09-29 14:00:55 +0000 (Tue, 29 Sep 2009) Log Message: ----------- [bugfix] XQueryURLRewrite: fixed ClassCastException in Jetty caused by wrong parameter handling in XQueryURLRewrite. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-09-28 18:21:16 UTC (rev 10168) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-09-29 14:00:55 UTC (rev 10169) @@ -659,7 +659,7 @@ public static class RequestWrapper extends javax.servlet.http.HttpServletRequestWrapper { - Map addedParams = new HashMap(); + Map<String, String[]> addedParams = new HashMap<String, String[]>(); Map attributes = new HashMap(); @@ -677,10 +677,7 @@ for (Enumeration e = request.getParameterNames(); e.hasMoreElements(); ) { String key = (String) e.nextElement(); String[] value = request.getParameterValues(key); - if (value.length == 1) - addedParams.put(key, value[0]); - else - addedParams.put(key, value); + addedParams.put(key, value); } contentType = request.getContentType(); @@ -704,11 +701,14 @@ } public void addParameter(String name, String value) { - addedParams.put(name, value); + addedParams.put(name, new String[] { value }); } public String getParameter(String name) { - return (String) addedParams.get(name); + String[] param = addedParams.get(name); + if (param != null && param.length > 0) + return param[0]; + return null; } public Map getParameterMap() { @@ -725,14 +725,7 @@ } public String[] getParameterValues(String s) { - Object value = addedParams.get(s); - if (value != null) { - if (value instanceof String[]) - return (String[]) value; - else - return new String[] { value.toString() }; - } - return null; + return addedParams.get(s); } public ServletInputStream getInputStream() throws IOException { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-10-30 13:38:43
|
Revision: 10292 http://exist.svn.sourceforge.net/exist/?rev=10292&view=rev Author: wolfgang_m Date: 2009-10-30 13:38:36 +0000 (Fri, 30 Oct 2009) Log Message: ----------- [bugfix] Fixed NPE in XQueryURLRewrite Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-10-30 08:31:33 UTC (rev 10291) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-10-30 13:38:36 UTC (rev 10292) @@ -471,7 +471,8 @@ while (node != null) { if (node.getNodeType() == Node.ELEMENT_NODE && Namespaces.EXIST_NS.equals(node.getNamespaceURI())) { URLRewrite urw = parseAction(request, (Element) node); - modelView.addView(urw); + if (urw != null) + modelView.addView(urw); } node = node.getNextSibling(); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-11-03 20:15:00
|
Revision: 10349 http://exist.svn.sourceforge.net/exist/?rev=10349&view=rev Author: wolfgang_m Date: 2009-11-03 20:14:52 +0000 (Tue, 03 Nov 2009) Log Message: ----------- [bugfix] XQueryURLRewrite: stop processing the request if one of the applied views returns an error code. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-11-03 20:12:45 UTC (rev 10348) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-11-03 20:14:52 UTC (rev 10349) @@ -315,7 +315,7 @@ HttpServletResponse wrappedResponse = response; if (modelView.hasViews()) - wrappedResponse = new CachingResponseWrapper(response); + wrappedResponse = new CachingResponseWrapper(response, true); if (modelView.getModel() == null) modelView.setModel(new PassThrough(modifiedRequest)); @@ -341,21 +341,22 @@ wrappedReq.setData(data); if (i < views.size() - 1) - wrappedResponse = new CachingResponseWrapper(response); + wrappedResponse = new CachingResponseWrapper(response, true); else - wrappedResponse = response; + wrappedResponse = new CachingResponseWrapper(response, false); doRewrite(view, wrappedReq, wrappedResponse, null); wrappedResponse.flushBuffer(); + + // catch errors in the view + status = ((CachingResponseWrapper) wrappedResponse).getStatus(); + if (status >= 400) { + flushError(response, wrappedResponse); + break; + } } } else { // HTTP response code indicates an error - byte[] data = ((CachingResponseWrapper) wrappedResponse).getData(); - if (data != null) { - response.setContentType(wrappedResponse.getContentType()); - response.setCharacterEncoding(wrappedResponse.getCharacterEncoding()); - response.getOutputStream().write(data); - response.flushBuffer(); - } + flushError(response, wrappedResponse); } } // Sequence result; @@ -383,6 +384,16 @@ } } + private void flushError(HttpServletResponse response, HttpServletResponse wrappedResponse) throws IOException { + byte[] data = ((CachingResponseWrapper) wrappedResponse).getData(); + if (data != null) { + response.setContentType(wrappedResponse.getContentType()); + response.setCharacterEncoding(wrappedResponse.getCharacterEncoding()); + response.getOutputStream().write(data); + response.flushBuffer(); + } + } + private void checkCache() throws EXistException { if (checkModified) { // check if any of the currently used sources has been updated @@ -668,6 +679,8 @@ String parentPath = controllerFile.getParentFile().getAbsolutePath(); sourceInfo.controllerPath = parentPath.substring(baseDir.getAbsolutePath().length()); + // replace windows path separators + sourceInfo.controllerPath = sourceInfo.controllerPath.replace('\\', '/'); return sourceInfo; } } @@ -741,7 +754,8 @@ context.declareVariable("exist:resource", resource); if (LOG.isTraceEnabled()) - LOG.debug("\nexist:path = " + path + "\nexist:resource = " + resource); + LOG.debug("\nexist:path = " + path + "\nexist:resource = " + resource + "\nexist:controller = " + + sourceInfo.controllerPath); } private class ModelAndView { @@ -1006,13 +1020,17 @@ protected CachingServletOutputStream sos = null; protected PrintWriter writer = null; protected int status = HttpServletResponse.SC_OK; + protected boolean cache; - public CachingResponseWrapper(HttpServletResponse servletResponse) { + public CachingResponseWrapper(HttpServletResponse servletResponse, boolean cache) { super(servletResponse); - origResponse = servletResponse; + this.cache = cache; + this.origResponse = servletResponse; } public PrintWriter getWriter() throws IOException { + if (!cache) + return super.getWriter(); if (sos != null) throw new IOException("getWriter cannnot be called after getOutputStream"); sos = new CachingServletOutputStream(); @@ -1022,6 +1040,8 @@ } public ServletOutputStream getOutputStream() throws IOException { + if (!cache) + return super.getOutputStream(); if (writer != null) throw new IOException("getOutputStream cannnot be called after getWriter"); if (sos == null) @@ -1058,9 +1078,13 @@ } public void setContentLength(int i) { + if (!cache) + super.setContentLength(i); } public void flushBuffer() throws IOException { + if (!cache) + super.flushBuffer(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-11-09 13:17:38
|
Revision: 10411 http://exist.svn.sourceforge.net/exist/?rev=10411&view=rev Author: wolfgang_m Date: 2009-11-09 13:17:30 +0000 (Mon, 09 Nov 2009) Log Message: ----------- [bugfix] XQueryURLRewrite: within controller, request:get-uri() returned an incomplete URI. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-11-09 10:32:05 UTC (rev 10410) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-11-09 13:17:30 UTC (rev 10411) @@ -223,8 +223,8 @@ DBBroker broker = null; try { broker = pool.get(user); - result = runQuery(broker, modifiedRequest, response, - staticRewrite == null ? "." : staticRewrite.getTarget()); + modifiedRequest.setAttribute(RQ_ATTR_REQUEST_URI, request.getRequestURI()); + result = runQuery(broker, modifiedRequest, response, staticRewrite); logResult(broker, result); } finally { @@ -514,11 +514,13 @@ config = null; } - private Sequence runQuery(DBBroker broker, RequestWrapper request, HttpServletResponse response, String basePath) + private Sequence runQuery(DBBroker broker, RequestWrapper request, HttpServletResponse response, + URLRewrite staticRewrite) throws ServletException, XPathException { // Try to find the XQuery SourceInfo sourceInfo; String moduleLoadPath = config.getServletContext().getRealPath("."); + String basePath = staticRewrite == null ? "." : staticRewrite.getTarget(); if (basePath == null) sourceInfo = getSource(broker, moduleLoadPath); else @@ -542,7 +544,7 @@ } // Find correct module load path queryContext.setModuleLoadPath(moduleLoadPath); - declareVariables(queryContext, sourceInfo, basePath, request, response); + declareVariables(queryContext, sourceInfo, staticRewrite.getPrefix(), basePath, request, response); if (compiled == null) { try { compiled = xquery.compile(queryContext, sourceInfo.source); @@ -714,7 +716,7 @@ return sourceInfo; } - private void declareVariables(XQueryContext context, SourceInfo sourceInfo, String basePath, + private void declareVariables(XQueryContext context, SourceInfo sourceInfo, String prefix, String basePath, RequestWrapper request, HttpServletResponse response) throws XPathException { HttpRequestWrapper reqw = new HttpRequestWrapper(request, "UTF-8", "UTF-8", false); @@ -728,7 +730,7 @@ context.declareVariable("exist:controller", sourceInfo.controllerPath); context.declareVariable("exist:root", basePath); context.declareVariable("exist:context", request.getContextPath()); - + context.declareVariable("exist:prefix", prefix == null ? "" : prefix); String path; if (sourceInfo.controllerPath.length() > 0 && !sourceInfo.controllerPath.equals("/")) path = request.getInContextPath().substring(sourceInfo.controllerPath.length()); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2009-11-12 12:56:26
|
Revision: 10466 http://exist.svn.sourceforge.net/exist/?rev=10466&view=rev Author: wolfgang_m Date: 2009-11-12 12:56:19 +0000 (Thu, 12 Nov 2009) Log Message: ----------- [bugfix] fixed possible NPE in XQueryURLRewrite. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-11-12 12:15:06 UTC (rev 10465) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2009-11-12 12:56:19 UTC (rev 10466) @@ -424,7 +424,7 @@ RequestWrapper modifiedRequest = new RequestWrapper(request); modifiedRequest.setPaths(uri, action.getPrefix()); if (LOG.isTraceEnabled()) - LOG.trace("Forwarding to target: " + action.getTarget() + " url: " + action.getURI()); + LOG.trace("Forwarding to : " + action.toString() + " url: " + action.getURI()); request = modifiedRequest; } } @@ -544,7 +544,7 @@ } // Find correct module load path queryContext.setModuleLoadPath(moduleLoadPath); - declareVariables(queryContext, sourceInfo, staticRewrite.getPrefix(), basePath, request, response); + declareVariables(queryContext, sourceInfo, staticRewrite, basePath, request, response); if (compiled == null) { try { compiled = xquery.compile(queryContext, sourceInfo.source); @@ -716,7 +716,7 @@ return sourceInfo; } - private void declareVariables(XQueryContext context, SourceInfo sourceInfo, String prefix, String basePath, + private void declareVariables(XQueryContext context, SourceInfo sourceInfo, URLRewrite staticRewrite, String basePath, RequestWrapper request, HttpServletResponse response) throws XPathException { HttpRequestWrapper reqw = new HttpRequestWrapper(request, "UTF-8", "UTF-8", false); @@ -730,6 +730,7 @@ context.declareVariable("exist:controller", sourceInfo.controllerPath); context.declareVariable("exist:root", basePath); context.declareVariable("exist:context", request.getContextPath()); + String prefix = staticRewrite == null ? null : staticRewrite.getPrefix(); context.declareVariable("exist:prefix", prefix == null ? "" : prefix); String path; if (sourceInfo.controllerPath.length() > 0 && !sourceInfo.controllerPath.equals("/")) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2010-01-08 15:42:46
|
Revision: 10963 http://exist.svn.sourceforge.net/exist/?rev=10963&view=rev Author: wolfgang_m Date: 2010-01-08 15:42:37 +0000 (Fri, 08 Jan 2010) Log Message: ----------- [bugfix] catch bad collection URIs while scanning the controller hierarchy in XQueryURLRewrite. Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2010-01-07 20:57:51 UTC (rev 10962) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2010-01-08 15:42:37 UTC (rev 10963) @@ -578,9 +578,9 @@ Collection subColl = collection; DocumentImpl controllerDoc = null; for (int i = 0; i < components.length; i++) { - if (components[i].length() > 0 && subColl.hasChildCollection(XmldbURI.createInternal(components[i]))) { - DocumentImpl doc = null; - try { + DocumentImpl doc = null; + try { + if (components[i].length() > 0 && subColl.hasChildCollection(XmldbURI.createInternal(components[i]))) { subColl = broker.openCollection(subColl.getURI().append(components[i]), Lock.READ_LOCK); if (subColl != null) { XmldbURI docUri = subColl.getURI().append("controller.xql"); @@ -589,17 +589,21 @@ controllerDoc = doc; } else break; - } catch (PermissionDeniedException e) { - LOG.debug("Permission denied while scanning for XQueryURLRewrite controllers: " + - e.getMessage(), e); - } finally { - if (doc != null) - doc.getUpdateLock().release(Lock.READ_LOCK); - if (subColl != null) - subColl.getLock().release(Lock.READ_LOCK); + } else { + break; } - } else { + } catch (PermissionDeniedException e) { + LOG.debug("Permission denied while scanning for XQueryURLRewrite controllers: " + + e.getMessage(), e); break; + } catch (Exception e) { + LOG.debug("Bad collection URI: " + path); + break; + } finally { + if (doc != null) + doc.getUpdateLock().release(Lock.READ_LOCK); + if (subColl != null) + subColl.getLock().release(Lock.READ_LOCK); } } collection.getLock().release(Lock.READ_LOCK); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <wol...@us...> - 2010-01-21 10:14:32
|
Revision: 11056 http://exist.svn.sourceforge.net/exist/?rev=11056&view=rev Author: wolfgang_m Date: 2010-01-21 10:14:25 +0000 (Thu, 21 Jan 2010) Log Message: ----------- [bugfix] preliminary fix for deadlock issue triggered by controller.xql stored in db. Port of rev 10998. Revision Links: -------------- http://exist.svn.sourceforge.net/exist/?rev=10998&view=rev Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2010-01-21 10:07:18 UTC (rev 11055) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2010-01-21 10:14:25 UTC (rev 11056) @@ -620,17 +620,22 @@ LOG.warn("XQueryURLRewrite controller could not be found"); return null; } - if (controllerDoc.getResourceType() != DocumentImpl.BINARY_FILE || - !controllerDoc.getMetadata().getMimeType().equals("application/xquery")) { - LOG.warn("XQuery resource: " + query + " is not an XQuery or " + - "declares a wrong mime-type"); - return null; + try { + if (controllerDoc.getResourceType() != DocumentImpl.BINARY_FILE || + !controllerDoc.getMetadata().getMimeType().equals("application/xquery")) { + LOG.warn("XQuery resource: " + query + " is not an XQuery or " + + "declares a wrong mime-type"); + return null; + } + sourceInfo = new SourceInfo(new DBSource(broker, (BinaryDocument) controllerDoc, true)); + String controllerPath = controllerDoc.getCollection().getURI().getRawCollectionPath(); + sourceInfo.controllerPath = + controllerPath.substring(locationUri.getCollectionPath().length()); + return sourceInfo; + } finally { + if (controllerDoc != null) + controllerDoc.getUpdateLock().release(Lock.READ_LOCK); } - sourceInfo = new SourceInfo(new DBSource(broker, (BinaryDocument) controllerDoc, true)); - String controllerPath = controllerDoc.getCollection().getURI().getRawCollectionPath(); - sourceInfo.controllerPath = - controllerPath.substring(locationUri.getCollectionPath().length()); - return sourceInfo; } catch (URISyntaxException e) { LOG.warn("Bad URI for base path: " + e.getMessage(), e); return null; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <sha...@us...> - 2010-07-20 10:37:18
|
Revision: 12004 http://exist.svn.sourceforge.net/exist/?rev=12004&view=rev Author: shabanovd Date: 2010-07-20 10:37:12 +0000 (Tue, 20 Jul 2010) Log Message: ----------- [feature] serialize element to output if it not URLRewriting instruction. Add "compiled-cache" property to resolve source validation issue. (default is true) Modified Paths: -------------- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java Modified: trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java =================================================================== --- trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2010-07-20 10:30:31 UTC (rev 12003) +++ trunk/eXist/src/org/exist/http/urlrewrite/XQueryURLRewrite.java 2010-07-20 10:37:12 UTC (rev 12004) @@ -58,6 +58,8 @@ import org.exist.storage.XQueryPool; import org.exist.storage.lock.Lock; import org.exist.storage.serializers.Serializer; +import org.exist.util.serializer.SAXSerializer; +import org.exist.util.serializer.SerializerPool; import org.exist.http.servlets.HttpRequestWrapper; import org.exist.http.servlets.HttpResponseWrapper; import org.exist.http.Descriptor; @@ -84,6 +86,7 @@ import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponseWrapper; +import javax.xml.transform.OutputKeys; import java.net.URISyntaxException; import java.util.Enumeration; @@ -91,6 +94,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Properties; import java.util.Vector; import java.util.regex.Pattern; import java.util.regex.Matcher; @@ -139,6 +143,8 @@ private boolean checkModified = true; + private boolean compiledCache = true; + private RewriteConfig rewriteConfig; @Override @@ -151,6 +157,11 @@ String opt = filterConfig.getInitParameter("check-modified"); if (opt != null) checkModified = opt != null && opt.equalsIgnoreCase("true"); + + opt = filterConfig.getInitParameter("compiled-cache"); + if (opt != null) + compiledCache = opt != null && opt.equalsIgnoreCase("true"); + } @Override @@ -226,60 +237,66 @@ try { broker = pool.get(user); modifiedRequest.setAttribute(RQ_ATTR_REQUEST_URI, request.getRequestURI()); - result = runQuery(broker, modifiedRequest, response, staticRewrite); + + Properties outputProperties = new Properties(); + + result = runQuery(broker, modifiedRequest, response, staticRewrite, outputProperties); logResult(broker, result); + + // process the query result + if (result.getItemCount() == 1) { + Item resource = result.itemAt(0); + if (!Type.subTypeOf(resource.getType(), Type.NODE)) + throw new ServletException("XQueryURLRewrite: urlrewrite query should return an element!"); + Node node = ((NodeValue) resource).getNode(); + if (node.getNodeType() == Node.DOCUMENT_NODE) + node = ((Document) node).getDocumentElement(); + if (node.getNodeType() != Node.ELEMENT_NODE) { + throw new ServletException("Redirect XQuery should return an XML element!"); + } + Element elem = (Element) node; + if (!(Namespaces.EXIST_NS.equals(elem.getNamespaceURI()))) { + response(broker, (NodeValue)resource, servletResponse, outputProperties); + return; + // throw new ServletException("Redirect XQuery should return an element in namespace " + Namespaces.EXIST_NS); + } + + if ("dispatch".equals(elem.getLocalName())) { + node = elem.getFirstChild(); + while (node != null) { + if (node.getNodeType() == Node.ELEMENT_NODE && Namespaces.EXIST_NS.equals(node.getNamespaceURI())) { + Element action = (Element) node; + if ("view".equals(action.getLocalName())) { + parseViews(modifiedRequest, action, modelView); + } else if ("cache-control".equals(action.getLocalName())) { + String option = action.getAttribute("cache"); + modelView.setUseCache("yes".equals(option)); + } else { + URLRewrite urw = parseAction(modifiedRequest, action); + if (urw != null) + modelView.setModel(urw); + } + } + node = node.getNextSibling(); + } + if (modelView.getModel() == null) + modelView.setModel(new PassThrough(elem, modifiedRequest)); + } else if ("ignore".equals(elem.getLocalName())) { + modelView.setModel(new PassThrough(elem, modifiedRequest)); + NodeList nl = elem.getElementsByTagNameNS(Namespaces.EXIST_NS, "cache-control"); + if (nl.getLength() > 0) { + elem = (Element) nl.item(0); + String option = elem.getAttribute("cache"); + modelView.setUseCache("yes".equals(option)); + } + } + } + } finally { pool.release(broker); } - // process the query result - if (result.getItemCount() == 1) { - Item resource = result.itemAt(0); - if (!Type.subTypeOf(resource.getType(), Type.NODE)) - throw new ServletException("XQueryURLRewrite: urlrewrite query should return an element!"); - Node node = ((NodeValue) resource).getNode(); - if (node.getNodeType() == Node.DOCUMENT_NODE) - node = ((Document) node).getDocumentElement(); - if (node.getNodeType() != Node.ELEMENT_NODE) { - throw new ServletException("Redirect XQuery should return an XML element!"); - } - Element elem = (Element) node; - if (!(Namespaces.EXIST_NS.equals(elem.getNamespaceURI()))) { - throw new ServletException("Redirect XQuery should return an element in namespace " + Namespaces.EXIST_NS); - } - - if ("dispatch".equals(elem.getLocalName())) { - node = elem.getFirstChild(); - while (node != null) { - if (node.getNodeType() == Node.ELEMENT_NODE && Namespaces.EXIST_NS.equals(node.getNamespaceURI())) { - Element action = (Element) node; - if ("view".equals(action.getLocalName())) { - parseViews(modifiedRequest, action, modelView); - } else if ("cache-control".equals(action.getLocalName())) { - String option = action.getAttribute("cache"); - modelView.setUseCache("yes".equals(option)); - } else { - URLRewrite urw = parseAction(modifiedRequest, action); - if (urw != null) - modelView.setModel(urw); - } - } - node = node.getNextSibling(); - } - if (modelView.getModel() == null) - modelView.setModel(new PassThrough(elem, modifiedRequest)); - } else if ("ignore".equals(elem.getLocalName())) { - modelView.setModel(new PassThrough(elem, modifiedRequest)); - NodeList nl = elem.getElementsByTagNameNS(Namespaces.EXIST_NS, "cache-control"); - if (nl.getLength() > 0) { - elem = (Element) nl.item(0); - String option = elem.getAttribute("cache"); - modelView.setUseCache("yes".equals(option)); - } - } - } - // store the original request URI to org.exist.forward.request-uri modifiedRequest.setAttribute(RQ_ATTR_REQUEST_URI, request.getRequestURI()); modifiedRequest.setAttribute(RQ_ATTR_SERVLET_PATH, request.getServletPath()); @@ -364,7 +381,42 @@ } } - private void flushError(HttpServletResponse response, HttpServletResponse wrappedResponse) throws IOException { + private void response(DBBroker broker, NodeValue value, ServletResponse response, Properties outputProperties) throws IOException { + + String formEncoding = "UTF-8"; + String contentType = "text/html"; + + ServletOutputStream sout = response.getOutputStream(); + PrintWriter output = new PrintWriter(new OutputStreamWriter(sout, formEncoding)); + response.setContentType(contentType + "; charset=" + formEncoding); +// response.addHeader( "pragma", "no-cache" ); +// response.addHeader( "Cache-Control", "no-cache" ); + + Serializer serializer = broker.getSerializer(); + serializer.reset(); + + SerializerPool serializerPool = SerializerPool.getInstance(); + + SAXSerializer sax = (SAXSerializer) serializerPool.borrowObject(SAXSerializer.class); + try { + outputProperties.setProperty(OutputKeys.INDENT, "yes"); + outputProperties.setProperty(OutputKeys.ENCODING, "UTF-8"); + + sax.setOutput(output, outputProperties); + serializer.setProperties(outputProperties); + serializer.setSAXHandlers(sax, sax); + + serializer.toSAX(value); + } catch (SAXException e) { + throw new IOException(e); + } finally { + serializerPool.returnObject(sax); + } + + output.flush(); + } + + private void flushError(HttpServletResponse response, HttpServletResponse wrappedResponse) throws IOException { byte[] data = ((CachingResponseWrapper) wrappedResponse).getData(); if (data != null) { response.setContentType(wrappedResponse.getContentType()); @@ -522,7 +574,7 @@ } private Sequence runQuery(DBBroker broker, RequestWrapper request, HttpServletResponse response, - URLRewrite staticRewrite) + URLRewrite staticRewrite, Properties outputProperties) throws ServletException, XPathException { // Try to find the XQuery SourceInfo sourceInfo; @@ -542,7 +594,11 @@ XQuery xquery = broker.getXQueryService(); XQueryPool pool = xquery.getXQueryPool(); - CompiledXQuery compiled = pool.borrowCompiledXQuery(broker, sourceInfo.source); + + CompiledXQuery compiled = null; + if (compiledCache) + compiled = pool.borrowCompiledXQuery(broker, sourceInfo.source); + XQueryContext queryContext; if (compiled == null) { queryContext = xquery.newContext(AccessContext.REST); @@ -565,8 +621,10 @@ // if (xdebug != null) // compiled.getContext().setDebugMode(true); +// outputProperties.put("base-uri", collectionURI.toString()); + try { - return xquery.execute(compiled, null); + return xquery.execute(compiled, null, outputProperties); } finally { pool.returnCompiledXQuery(sourceInfo.source, compiled); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |