AxisServlet does not respect Servlet Context paths with slashes
---------------------------------------------------------------
Key: AXIS2-2592
URL: https://issues.apache.org/jira/browse/AXIS2-2592
Project: Axis 2.0 (Axis2)
Issue Type: Bug
Components: kernel
Affects Versions: nightly
Environment: Tomcat 6 or Glassfish 9 on Windows XP.
Reporter: Steven E. Harris
AxisServlet.initContextRoot() inspects the Servlet parameter
"axis2.find.context" to figure out whether it should use the "contextRoot"
parameter specified in axis2.xml, or attempt to discover the Servlet's context
path from the current request, per this discussion:
"svn commit: r468722 ..."
http://mail-archives.apache.org/mod_mbox/ws-axis-cvs/200610.mbox/[EMAIL
PROTECTED]
The problem lies with the following portion of initContextRoot():
if (contextRoot == null || contextRoot.trim().length() == 0) {
String[] parts = JavaUtils.split(req.getContextPath(), '/');
if (parts != null) {
for (int i = 0; i < parts.length; i++) {
if (parts[i].length() > 0) {
contextRoot = parts[i];
break;
}
}
}
if (contextRoot == null || req.getContextPath().equals("/")) {
contextRoot = "/";
}
configContext.setContextRoot(contextRoot);
}
For some reason, this code takes the current request's reported context path
and splits it on slashes, taking only the first token as the context path. This
fails with Servlets deployed with context paths containing slashes.
As an example, my Servlet is deployed with a context path of "2007/04" and an
Axis2 "servicePath" of "ws". That is, services should be found via
http://<my server>/2007/04/ws/<service name>
I specified "2007/04" in axis2.xml as my "contextRoot", but Axis2 winds up
ignoring this parameter anyway if the "axis2.find.context" Servlet parameter is
not set to "false". Upon the first real request arriving,
AxisServlet.initContextRoot() runs. It decides to try to honor the Servlet's
context path, and retrieves it via HttpServletRequest.getContextPath(). This
function returns "/2007/04". But the "split" operation chops this up and
selects "2007" as the the context root, then proceeds to set this as the
configurationContext's contextRoot.
This causes the configurationContext's serviceContextPath value to get
rewritten as "2007/ws", which fails to locate a service.
The fix is to not try splitting up the HttpServletRequest's context path.
Perhaps you want to remove the leading slash, but there's no reason that we
should be only honoring the name components before the first slash beyond the
leading one.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]