DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12769>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=12769

JWS deployment with packages broken





------- Additional Comments From [EMAIL PROTECTED]  2002-12-30 21:30 -------
I'm going to copy some text from your mail from last March (http://www.mail-
[EMAIL PROTECTED]/msg01598.html), Mark:

> Case 1: No package statement in .jws file, copy it to webapps/axis
> - This URL works.  http://localhost:8080/axis/BasicMath.jws?wsdl.

Right, easy.

> Case 2: No package statement in .jws file, copy it to webapps/axis/mypkg.
> - This URL works.  http://localhost:8080/axis/mypkg/BasicMath.jws?wsdl.

This is a case we explicitly support, though I'm not sure exactly why.  You 
can put a jws file anywhere in your webapp hierarchy, and we'll happily 
compile it to a matching location underneath your JWS class dir (usually 
jwsClasses).  So you'd get axis/WEB-INF/jwsClasses/mypkg/BasicMath.class in 
this case), with a custom classloader which knows where that file is.

> Case 3: "package mypkg;" in .jws file, copy it to webapps/axis
> - This URL doesn't work.
> http://localhost:8080/axis/mypkg/BasicMath.jws?wsdl.

This is because the class name we end up looking for is precisely the file 
name of the JWS file.  So even if you used the somewhat better 
URL "...axis/BasicMath.jws?wsdl" to point to the real JWS file, we would try 
to load the "BasicMath" class instead of the "mypkg.BasicMath" class, which 
would fail.  In this case, the compiler would put the class file in WEB-
INF/jwsClasses/mypkg/BasicMath.class, because it's output dir is jwsClasses 
and the class has a package "mypkg".

For us to correctly find the class file and load the class in this case, we 
would need to know that the class had a package.  We could do this in one of 
two ways - 1) grovel through the JWS file to find the package declaration 
manually, or 2) assume that all JWS files are rooted in the server's root (the 
webapp root), and any JWS files below the top level are expected to have a 
package which matches their location in the hierarchy.  
So "axis/mypkg/Foo.jws" would end up being "mypkg.Foo", etc.

> Case 4: "package mypkg;" in .jws file, copy it to webapps/axis/mypkg
> - I believe this is what you suggested I try in your last email.
> - This URL doesn't work.
> http://localhost:8080/axis/mypkg/BasicMath.jws?wsdl.
> - In fact, this creates BasicMath.class in webapps/axis/mypkg/mypkg.

This is because we're both creating the "matching" hierarchy as described in 
case 2 above AND the class has a package so the compiler creates the 
extra "mypkg" dir under the output dir.

As I see it, we have these options:

a) status quo, no package statements in JWS source, put them wherever.

b) go read through the source file before compiling to make sure we get the 
right package, always compile to the base output dir, and remember the package 
in a hashtable in JWSHandler.  This is probably the most "accurate" solution, 
but will require scanning through the source file up to the class declaration 
each time we compile.

c) assume all JWS files have a package statement matching their position in 
the directory hierarchy relative to the server root.  So if someone asks 
for "foo/bar/Thing.jws", we should try loading "foo.bar.Thing".  This will 
break some existing applications (like our JWS tests, which put jws files in 
a "jws/" directory with no package statements).

Opinions?

Reply via email to