#52 callMethodOfServlet() problem & solution

closed-fixed
nobody
WebKit (58)
5
2006-07-07
2003-08-16
No

Problem:
.callMethodOfServlet() does not work correct with
ExtraPathInfo=1 and when one servlet calls another
using fake paths. E.g.
http://localhost/WK/context/one.py/fake1/fake2

Analyse:
There is a small problem in resolveInternalRelativePath()
function which works only with relative paths
like 'mypath/myservlet'.
It does NOT work with absolute
paths: /mycontext/mypath/myservlet'
nor '/mypath/myservlet' nor full URI:
http://localhost/WK/mycontext/mypath/myservlet

Solution:
The solution is to add a small line of code.

def resolveInternalRelativePath(self, trans, url,
context=None):
# [cut]
if context is None: # delete it
context = req._contextName # delete it
path = '/%s%s' % (context, url) # delete it
path = '%s' % (url) # ADD this line
# [cut]

Now, http://localhost/WK/context/one/fake1/fake2
works fine. This servlet can call the another without any
problem. It is done using .callMethodOfServlet
with '/context/servlets/second' as a path
(the path should include context name).

Discussion

  • Logged In: YES
    user_id=173690

    Can anyone confirm whether this bug exists in Webware CVS?
    I know that a lot of this code has changed since 0.8, so I
    suspect it might not be an issue anymore.

     
  • Logged In: YES
    user_id=193957

    This has been fixed in the SVN trunk and will go into
    version 0.9.2.

     
    • status: open --> closed-fixed