You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by André Schütz <An...@gmx.de> on 2012/03/14 00:12:13 UTC

StackOverflow while getting browser info

Hi,

I have the following code in my MyApplication class:

{CODE}

public void init() {
    super.init();
    getRequestCycleSettings().setGatherExtendedBrowserInfo(true);
    getResourceSettings().setThrowExceptionOnMissingResource(false);

    ...
}

public Session newSession(Request request, Response response) {
        MySession session = new MySession(request);

        // determine default language from the browser
        String defaultLanguage = null;
        if (request != null && request.getClientUrl() != null && !request.getClientUrl().toString().isEmpty()) {
            defaultLanguage = session.getClientInfo().getProperties().getNavigatorLanguage();
        }
        Locale locale = session.getLocale();

        // no locale available
        if (locale == null) {
            if (defaultLanguage != null) {
                if (defaultLanguage.startsWith("en")) {
                    locale = new Locale("en", "EN");
                }
                else if (defaultLanguage.startsWith("de")) {
                    locale = new Locale("de", "DE");
                }
            }
            else {
                locale = new Locale("en", "EN");
            }

            session.setLocale(locale);
        }

        return session;
    }

{CODE}

I get an error, when I delete the Cookies in my browser and reload the actual page. The same error occurs when I delete the line ( if (request != null && request.getClientUrl() != null && request.getClientUrl().toString().isEmpty()) { ) from the code example at building time from the TestHomePage.java.

The error is:

{ERROR}

java.lang.StackOverflowError
	org.apache.wicket.session.HttpSessionStore.getHttpSession(HttpSessionStore.java:95)
	org.apache.wicket.session.HttpSessionStore.getSessionId(HttpSessionStore.java:155)
	org.apache.wicket.session.HttpSessionStore.lookup(HttpSessionStore.java:192)
	org.apache.wicket.Application.fetchCreateAndSetSession(Application.java:1526)
	org.apache.wicket.Session.get(Session.java:156)
	org.apache.wicket.Application$1.onInstantiation(Application.java:279)
	org.apache.wicket.application.ComponentInstantiationListenerCollection$1.notify(ComponentInstantiationListenerCollection.java:36)
	org.apache.wicket.application.ComponentInstantiationListenerCollection$1.notify(ComponentInstantiationListenerCollection.java:34)
	org.apache.wicket.util.listener.ListenerCollection.notify(ListenerCollection.java:80)
	org.apache.wicket.application.ComponentInstantiationListenerCollection.onInstantiation(ComponentInstantiationListenerCollection.java:32)
	org.apache.wicket.Component.<init>(Component.java:678)
	org.apache.wicket.MarkupContainer.<init>(MarkupContainer.java:118)
	org.apache.wicket.Page.<init>(Page.java:206)
	org.apache.wicket.Page.<init>(Page.java:170)
	org.apache.wicket.markup.html.WebPage.<init>(WebPage.java:74)
	org.apache.wicket.markup.html.pages.BrowserInfoPage.<init>(BrowserInfoPage.java:66)
	org.apache.wicket.protocol.http.WebSession.newBrowserInfoPage(WebSession.java:239)
	org.apache.wicket.protocol.http.WebSession.getClientInfo(WebSession.java:216)

{ERROR}

Any ideas why that happens?

Thank you,
Andre
-- 
Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org


Re: StackOverflow while getting browser info

Posted by Dan Retzlaff <dr...@gmail.com>.
Andre, check out this javadoc comment on Session#getClientInfo:

 * Note: Do <strong>not</strong> call this method from your custom {@link
Session} constructor
 * because the temporary page needs a constructed {@link Session} to be
able to work.

Dan

2012/3/13 "André Schütz" <An...@gmx.de>

> Hi,
>
> I have the following code in my MyApplication class:
>
> {CODE}
>
> public void init() {
>    super.init();
>    getRequestCycleSettings().setGatherExtendedBrowserInfo(true);
>    getResourceSettings().setThrowExceptionOnMissingResource(false);
>
>    ...
> }
>
> public Session newSession(Request request, Response response) {
>        MySession session = new MySession(request);
>
>        // determine default language from the browser
>        String defaultLanguage = null;
>        if (request != null && request.getClientUrl() != null &&
> !request.getClientUrl().toString().isEmpty()) {
>            defaultLanguage =
> session.getClientInfo().getProperties().getNavigatorLanguage();
>        }
>        Locale locale = session.getLocale();
>
>        // no locale available
>        if (locale == null) {
>            if (defaultLanguage != null) {
>                if (defaultLanguage.startsWith("en")) {
>                    locale = new Locale("en", "EN");
>                }
>                else if (defaultLanguage.startsWith("de")) {
>                    locale = new Locale("de", "DE");
>                }
>            }
>            else {
>                locale = new Locale("en", "EN");
>            }
>
>            session.setLocale(locale);
>        }
>
>        return session;
>    }
>
> {CODE}
>
> I get an error, when I delete the Cookies in my browser and reload the
> actual page. The same error occurs when I delete the line ( if (request !=
> null && request.getClientUrl() != null &&
> request.getClientUrl().toString().isEmpty()) { ) from the code example at
> building time from the TestHomePage.java.
>
> The error is:
>
> {ERROR}
>
> java.lang.StackOverflowError
>
>  org.apache.wicket.session.HttpSessionStore.getHttpSession(HttpSessionStore.java:95)
>
>  org.apache.wicket.session.HttpSessionStore.getSessionId(HttpSessionStore.java:155)
>
>  org.apache.wicket.session.HttpSessionStore.lookup(HttpSessionStore.java:192)
>
>  org.apache.wicket.Application.fetchCreateAndSetSession(Application.java:1526)
>        org.apache.wicket.Session.get(Session.java:156)
>
>  org.apache.wicket.Application$1.onInstantiation(Application.java:279)
>
>  org.apache.wicket.application.ComponentInstantiationListenerCollection$1.notify(ComponentInstantiationListenerCollection.java:36)
>
>  org.apache.wicket.application.ComponentInstantiationListenerCollection$1.notify(ComponentInstantiationListenerCollection.java:34)
>
>  org.apache.wicket.util.listener.ListenerCollection.notify(ListenerCollection.java:80)
>
>  org.apache.wicket.application.ComponentInstantiationListenerCollection.onInstantiation(ComponentInstantiationListenerCollection.java:32)
>        org.apache.wicket.Component.<init>(Component.java:678)
>        org.apache.wicket.MarkupContainer.<init>(MarkupContainer.java:118)
>        org.apache.wicket.Page.<init>(Page.java:206)
>        org.apache.wicket.Page.<init>(Page.java:170)
>        org.apache.wicket.markup.html.WebPage.<init>(WebPage.java:74)
>
>  org.apache.wicket.markup.html.pages.BrowserInfoPage.<init>(BrowserInfoPage.java:66)
>
>  org.apache.wicket.protocol.http.WebSession.newBrowserInfoPage(WebSession.java:239)
>
>  org.apache.wicket.protocol.http.WebSession.getClientInfo(WebSession.java:216)
>
> {ERROR}
>
> Any ideas why that happens?
>
> Thank you,
> Andre
> --
> Empfehlen Sie GMX DSL Ihren Freunden und Bekannten und wir
> belohnen Sie mit bis zu 50,- Euro! https://freundschaftswerbung.gmx.de
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>