You are viewing a plain text version of this content. The canonical link for it is here.
Posted to apache-bugdb@apache.org by Rajesh Kamath <ra...@hotmail.com> on 1999/03/03 02:11:24 UTC
mod_jserv/3987: Problem with loading a class in a jar file with a directory structure
>Number: 3987
>Category: mod_jserv
>Synopsis: Problem with loading a class in a jar file with a directory structure
>Confidential: no
>Severity: non-critical
>Priority: medium
>Responsible: jserv
>State: open
>Class: sw-bug
>Submitter-Id: apache
>Arrival-Date: Tue Mar 2 17:20:01 PST 1999
>Last-Modified:
>Originator: rajesh_r_kamath@hotmail.com
>Organization:
apache
>Release: 1.3.4
>Environment:
Apache 1.3.4 , JServ 1.0b3, Windows NT, VC 5.0 compiler
>Description:
Assume a class in a jar/zip file (foo1.jar) with the following
directory structure:
foo/Test.class
assume a servlet zone: test
assume the following entries in the jserv.properties:
zones=test
test.properties=C:\Program Files\Apache Group\Apache JServ\conf\test.properties
assume that the repository of the servlet zone contains the
jar/zip file - namely foo1.jar. viz. the following entries in
the test.properties:
repositories=C:\...\foo1.jar
assume the entry in the httpd.conf:
ApJServMount /servlets/test /test
assume the servername: http://www.cheeroot.com
When I place this jar/zip file in the repository of a servlet zone and try to
access it with a URL:
http://www.cheeroot.com/servlets/test/foo/Test
This gives the ClassNotFoundException: class foo not found
I tried all combinations of the URL: foo.Test, etc. but got the same exception.
The problem does not exist if the class does not reside within a directory in
the jar/zip file. I did not test it with a jar file with more directory depths
(ex: foo/foo1/Test.class), but i think that it could give more information
about the problem. (please look at the suggestion for more input)
>How-To-Repeat:
Refer to the full description.
>Fix:
I could not debug it fully since I couldn't spend enough time on it... but
this is what i found from debugging the C and the Java module... hope it is
helpful.
The java part of the code gets the wrong information. It gets servlet
name as "foo" and path info as "Test" and the correct servlet zone "test".
This can be verified via the request headers in the jserv log file. or in
(JServConnection.java -- readData at switch(id)
when id == C for servlet zone/name and
when id == E for path info)
I believe that the error lies in jserv_translate_match:
When a match is found for a servlet zone, in this case:
mountpoint = "/servlets/test/"
URI = "/servlets/test/foo/Test"
it enters the "else if ((uri[x-1]=='/') & (mnt[y]=='\0')) { " block
and since mount->zone == "/servlets/test" finally comes to the following
point:
x = 0;
while (tmp[x] != '/' && tmp[x] != 0)
x++;
if (tmp[x] == '/') {
r->path_info = ap_pstrdup(r->pool,tmp+x);
tmp[x] = 0;
}
req->zone=mount->zone;
req->servlet=ap_pstrdup(r->pool,tmp);
return req;
I could not understand what was done here, but this generated the incorrect
servlet name and the path info for the servlet.
The error as I perceive it:
The servlet name :
should be:
the string from end of uri to the last / in uri (or the start of uri whichever
occurs first)
as opposed to:
the string from beginning of uri to the next / in uri (or the end of uri
whichever occurs first). This is one of the reasons why the class which does
not have a directory depth does not produce an error.
the path info:
should be:
the string from the start of uri to the last / in uri (if one exists else "")
as opposed to:
the string from the first / in uri to the end of uri
I did not debug this in complete detail but this loop definitely seemed out of
place. I would really appreciate it if you could check this out and drop me a
line in case you find something out or point any mistakes that I might have
made.
Thanks in advance,
Cheeroot
>Audit-Trail:
>Unformatted:
[In order for any reply to be added to the PR database, ]
[you need to include <ap...@Apache.Org> in the Cc line ]
[and leave the subject line UNCHANGED. This is not done]
[automatically because of the potential for mail loops. ]
[If you do not include this Cc, your reply may be ig- ]
[nored unless you are responding to an explicit request ]
[from a developer. ]
[Reply only with text; DO NOT SEND ATTACHMENTS! ]