Hi Lachlan,

Thanks for your help. This is for sure, I'm getting the instance of 
WOServletContext at runtime. I didn't put the log statements you mentioned but 
I'm running my GlassFish instance in debug mode and inspecting values through 
remote debugging.

How can I switch to 5.4.3? I've downloaded Wonder Frameworks from 
Wonder-Frameworks.tar Do if this contains the right classes, do I need to do 
something special to enable them?

This is where I'm calling intallPatches() method.

@Override
public void finishInitialization() {
        NSLog.out.appendln("Installing Wonder Patches...");
        installPatches();
        NSLog.out.appendln("Wonder Patches Installed!");
        super.finishInitialization();
}

On 2010-06-27, at 3:29 PM, Lachlan Deck wrote:

> Hi Farrukh,
> 
> On 26/06/2010, at 10:56 PM, Farrukh Ijaz wrote:
> 
>> The worequest class is er.extensions.appserver.ERXRequest
>> The wocontext raises NullPointerException as request.context() returns null.
> 
> Sorry - better if do this in one of your components:
> @Override
> public void appendToResponse(WOResponse response, WOContext context) {
>       super.appendToResponse(response, context);
>       NSLog.out.appendln("request class:" + 
> context.request().getClass().getName());
>       NSLog.out.appendln("context class:" + context.getClass().getName());
>       NSLog.out.appendln();
> }
> 
> This should confirm that you're getting 
> com.webobjects.jspservlet.WOServletContext at runtime which isn't what you 
> want with Wonder.
> 
> Anyway, I've just committed the fix for the original commit for WONDER-389 
> (which obviously didn't get tested properly at the time). I've tested this 
> with both WO5.3.3 and WO5.4.3 and in both cases _rewriteURL gets called 
> appropriately allowing you to customise the url as desired.
> 
> As a work-around (prior to the updated build being available) you can do the 
> following in your ERXApplication subclass:
> @Override
> public void installPatches() {
>       super.installPatches();
>       // if you're using WO5.3.3
>       setContextClassName(ERXWOServletContext.class.getName());
>       // if you're using WO5.4.3
>       setContextClassName(ERXWOServletContext54.class.getName());
> }
> 
> So to rework your example to do the rewriting you could do the following...
> ------------------------------------------
> @Override
> public WOResponse dispatchRequest(WORequest request) {
>       String urlAlias = request.stringFormValueForKey("_alias");
>       if (!ERXStringUtilities.stringIsNullOrEmpty(urlAlias)) {
>               ERXThreadStorage.takeValueForKey(urlAlias, "url._alias");
>       }
>       return super.dispatchRequest(request);
> }
> 
> // and to customise the urls I'd do something like...
> @Override
> public String _rewriteURL(String url) {
>       String resultURL = url;
> 
>       // your custom rules here
>       String urlAlias = ERXThreadStorage.valueForKey("url._alias");
>       if (ERXStringUtilities.stringIsNullOrEmpty(urlAlias)) {
>               /* either */
>               resultURL = resultURL.replace(servletConnectURL(), urlAlias);
>               /* or, in case of multi-domain hosting */
>               String appBundleName = applicationName() + ".woa";
>               int index = url.indexOf(appBundleName);
>               if (index >= 0) {
>                       index += appBundleName.length();
>                       resultURL = urlAlias + resultURL.substring(index);
>               }
>       }
>       return resultURL;
> }
>> 
>> On 2010-06-26, at 2:03 PM, Lachlan Deck wrote:
>> 
>>> Hi Farrukh,
>>> 
>>> On 26/06/2010, at 2:05 PM, Farrukh Ijaz wrote:
>>> 
>>>> I don't know why installPatches() didn't bring the change. Although I'm 
>>>> using Wonder's latest stable release so the change mentioned in the 
>>>> WONDER-389 should be reflected.
>>> 
>>> So are you using WO5.3.3 or WO5.4.3?
>>> 
>>> Well, let's confirm a few things first:
>>> 
>>> @Override
>>> public WOResponse dispatchRequest(WORequest request) {
>>>     LOG.warn("worequest class:" + request.getClass().getName());
>>>     LOG.warn("wocontext class:" + request.context().getClass().getName());
>>>     ...
>>> }
>>> 
>>> What do you get?
>>> 
>>>> However, I did my work around and thought to share with you as I found it 
>>>> to be flexible and dynamic and perhaps wonder team could implement 
>>>> something like this. <...snip custom application code...>
>>> 
>>> No. That's custom code. See below.
>>> 
>>>> And defined following rewrite rules:
>>>> 
>>>> RewriteRule ^/app/(.*)$ 
>>>> /Application/WebObjects/MyApplication.woa/$1?_alias=/app [L,PT,QSA]
>>>> RewriteRule ^/xyz/(.*)$ 
>>>> /Application/WebObjects/MyApplication.woa/$1?_alias=/xyz [L,PT,QSA]
>>>> RewriteRule ^/abc/(.*)$ 
>>>> /Application/WebObjects/MyApplication.woa/$1?_alias=/abc [L,PT,QSA]
>>>> 
>>>> Now my application be accessed with three different aliases /app, /xyz and 
>>>> /abc and the response contains the corresponding rewritten url. No need to 
>>>> set the properties in the Properties for pattern and replace as that can 
>>>> be directly controlled with apache config file.
>>>> 
>>>> However, I would like to know I've implemented this change at right place 
>>>> or there is any other method which more appropriate such as _rewriteURL 
>>>> but that is still not working for me.
>>> 
>>> Yes, _rewriteURL is intended to be overridden by your subclasses for custom 
>>> rewrite rules.
> 
> with regards,
> --
> 
> Lachlan Deck
> 
> 
> 

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to