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]