You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xindice-dev@xml.apache.org by na...@apache.org on 2008/03/13 02:20:54 UTC
svn commit: r636596 - in /xml/xindice/trunk: config/web.xml
java/src/org/apache/xindice/server/XindiceServlet.java
Author: natalia
Date: Wed Mar 12 18:20:52 2008
New Revision: 636596
URL: http://svn.apache.org/viewvc?rev=636596&view=rev
Log:
Changes for compatibility with different web containers.
Logic for determining the type of request (XML-RPC, Web DAV, WevAdmin) refined
Modified:
xml/xindice/trunk/config/web.xml
xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java
Modified: xml/xindice/trunk/config/web.xml
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/config/web.xml?rev=636596&r1=636595&r2=636596&view=diff
==============================================================================
--- xml/xindice/trunk/config/web.xml (original)
+++ xml/xindice/trunk/config/web.xml Wed Mar 12 18:20:52 2008
@@ -63,7 +63,7 @@
<servlet-mapping>
<servlet-name>xindice</servlet-name>
- <url-pattern>/</url-pattern>
+ <url-pattern>/*</url-pattern>
</servlet-mapping>
<!--
Modified: xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java
URL: http://svn.apache.org/viewvc/xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java?rev=636596&r1=636595&r2=636596&view=diff
==============================================================================
--- xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java (original)
+++ xml/xindice/trunk/java/src/org/apache/xindice/server/XindiceServlet.java Wed Mar 12 18:20:52 2008
@@ -312,8 +312,10 @@
* @exception ServletException if a servlet error occurs
*/
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
+ request.setCharacterEncoding("utf-8");
+
// get requested information
- String path = request.getServletPath();
+ String path = getPath(request);
String method = request.getMethod();
// xmlrpc requests do not have path (always '/') and are always POST
@@ -326,9 +328,13 @@
return;
}
+ // get viewer parameter (missing if DAV request)
+ String viewer = request.getParameter("viewer");
+ String requestURI = request.getRequestURI();
+
// empty path - redirect to initial page
- if (path.length() == 0) {
- String redirect = request.getContextPath() + request.getServletPath() + "/?viewer=default";
+ if (path.length() == 0 && viewer == null && method.equalsIgnoreCase("GET")) {
+ String redirect = requestURI + "/?viewer=default";
response.sendRedirect(redirect);
return;
}
@@ -342,18 +348,15 @@
throw new ServletException(e);
}
- // get viewer parameter (missing if DAV request)
- String viewer = request.getParameter("viewer");
-
// WebDAV requests do not have viewer parameter, nor can not GET a collection
- if (viewer == null && !(path.endsWith("/") && method.equalsIgnoreCase("GET"))) {
+ if (viewer == null && !(target.getName() == null && method.equalsIgnoreCase("GET"))) {
DAVComponent m = webAdmin.getMethod(method);
if (m == null) {
// method is not supported
if (log.isInfoEnabled()) {
log.info("Method " + method + " is not supported.");
}
- response.setStatus(WebdavStatus.SC_NOT_IMPLEMENTED);
+ response.sendError(WebdavStatus.SC_NOT_IMPLEMENTED);
return;
}
@@ -364,45 +367,70 @@
// HTML requests are all the rest
Collection col = target.getCollection();
String resource = target.getName();
- if (col == null) {
+ if (viewer == null) {
+ viewer = "default";
+ }
+
+ if (target.isRoot()) {
// redirect if path is not '/'
- if (!path.equals("/")) {
- String redirect = request.getContextPath() + request.getServletPath() + "/?viewer=" + viewer;
+ if (!path.endsWith("/")) {
+ String redirect = requestURI + "/?viewer=" + viewer;
response.sendRedirect(redirect);
return;
}
HtmlDatabaseViewer v = webAdmin.getDatabaseViewer(viewer);
if (v == null) {
- response.setStatus(WebdavStatus.SC_NOT_IMPLEMENTED);
+ response.sendError(WebdavStatus.SC_NOT_IMPLEMENTED);
return;
}
v.execute(request, response);
+
+ } else if (col == null) {
+ response.sendError(WebdavStatus.SC_NOT_FOUND);
+
} else if (resource == null) {
// redirect if path does not end with '/'
if (!path.endsWith("/")) {
- String redirect = request.getContextPath() + request.getServletPath() + path + "/?viewer=" + viewer;
+ String redirect = requestURI + "/?viewer=" + viewer;
response.sendRedirect(redirect);
return;
}
HtmlCollectionViewer v = webAdmin.getCollectionViewer(viewer);
if (v == null) {
- response.setStatus(WebdavStatus.SC_NOT_IMPLEMENTED);
+ response.sendError(WebdavStatus.SC_NOT_IMPLEMENTED, "No action defined for this viewer");
return;
}
v.execute(request, response, col);
+
} else {
HtmlResourceViewer v = webAdmin.getResourceViewer(viewer);
if (v == null) {
- response.setStatus(WebdavStatus.SC_NOT_IMPLEMENTED);
+ response.sendError(WebdavStatus.SC_NOT_IMPLEMENTED, "No action defined for this viewer");
return;
}
v.execute(request, response, col, resource);
}
+ }
+
+ private String getPath(HttpServletRequest request) {
+ StringBuffer pathBuf = new StringBuffer(request.getServletPath());
+ String pathInfo = request.getPathInfo();
+ if (pathInfo != null) {
+ pathBuf.append(pathInfo);
+ }
+
+ // workaround for web containers incorrectly returning empty pathInfo for path '/'
+ int len = pathBuf.length();
+ if (request.getRequestURI().endsWith("/") && (len == 0 || pathBuf.charAt(len - 1) != '/')) {
+ pathBuf.append("/");
+ }
+
+ return pathBuf.toString();
}
}