You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by Robin Shine <ro...@pmease.com> on 2014/03/27 15:30:30 UTC

Avoid calling Page.onInitialize if page constructor throws an exception

Hi All,

We are glad to see that the issue WICKET-5387 (Page#onInitialize called after an exception in the constructor of Page) has been resolved in 6.13.0. However when I tried this version (and 6.14.0) with below code, the issue still exist:

public class TestPage extends WebPage {

    public TestPage() {
        throw new RuntimeException("exception");
    }

    @Override
    protected void onInitialize() {
        super.onInitialize();
        
        System.out.println("onInitialize");
    }
    
}

As you can see from above code, I intentionally throws an exception in TestPage constructor and hoping that onInitialize() method is not called when I visit that page. But the result is that "onInitialize" is still getting called in this case. Am I understanding WICKET-5387 incorrectly? And is there any approach to prevent onInitialize() from being called in case of a constructor exception? We want this as onInitialize() might rely on some params setup in the constructor, and calling onInitialize() will lead to other exceptions hiding exceptions thrown in constructor.

Regards

Robin

Re: Avoid calling Page.onInitialize if page constructor throws an exception

Posted by Robin Shine <ro...@pmease.com>.
Hi Sven,


An issue has been created for this with a quickstart:
https://issues.apache.org/jira/browse/WICKET-5546

 
Regards
Robin



________________________________
 From: Sven Meier <sv...@meiers.net>
To: users@wicket.apache.org 
Sent: Friday, March 28, 2014 4:22 PM
Subject: Re: Avoid calling Page.onInitialize if page constructor throws an exception
 

Hi Robin,

we should try to improve that. Please create a new issue with a quickstart.

Thanks
Sven


On 03/28/2014 09:16 AM, Robin Shine wrote:
> Hi Sven,
>
> Thanks for looking into this. I started a new wicket project from scratch using Wicket maven archetype, and it does work as expected! Then I checked into my project to find the difference, and tt turns out that this issue will occur as long as below code is added in wicket WebApplication.init():
>
>
>          getComponentInstantiationListeners().add(new IComponentInstantiationListener() {
>              
>              @Override
>              public void onInstantiation(Component component) {
>                  component.add(new Behavior() {
>
>                  });
>              }
>              
>          });
>
> It seems that the instantiation listener adds the behavior to the page at very start of the page constructor, and then the page is marked as dirty to cause onInitialize() being called afterwards. Is this a bug or expected behavior?
>
>
> Regards
> Robin
>
>
>
> ________________________________
>   From: Sven Meier <sv...@meiers.net>
> To: users@wicket.apache.org
> Sent: Thursday, March 27, 2014 10:49 PM
> Subject: Re: Avoid calling Page.onInitialize if page constructor throws an exception
>  
>
> Hi,
>
> #onInitialize() is not called here with 6.14.0 and 6.15.0-SNAPSHOT.
>
> Regards
> Sven
>
>
> On 03/27/2014 03:30 PM, Robin Shine wrote:
>> Hi All,
>>
>> We are glad to see that the issue WICKET-5387 (Page#onInitialize called after an exception in the constructor of Page) has been resolved in 6.13.0. However when I tried this version (and 6.14.0) with below code, the issue still exist:
>>
>> public class TestPage extends WebPage {
>>
>>        public TestPage() {
>>            throw new RuntimeException("exception");
>>        }
>>
>>        @Override
>>        protected void onInitialize() {
>>            super.onInitialize();
>>            
>>            System.out.println("onInitialize");
>>        }
>>        
>> }
>>
>> As you can see from above code, I intentionally throws an exception in TestPage constructor and hoping that onInitialize() method is not called when I visit that page. But the result is that "onInitialize" is still getting called in this case. Am I understanding WICKET-5387 incorrectly? And is there any approach to prevent onInitialize() from being called in case of a constructor exception? We want this as onInitialize() might rely on some params setup in the constructor, and calling onInitialize() will lead to other exceptions hiding exceptions thrown in constructor.
>>
>> Regards
>>
>> Robin
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org


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

Re: Avoid calling Page.onInitialize if page constructor throws an exception

Posted by Sven Meier <sv...@meiers.net>.
Hi Robin,

we should try to improve that. Please create a new issue with a quickstart.

Thanks
Sven


On 03/28/2014 09:16 AM, Robin Shine wrote:
> Hi Sven,
>
> Thanks for looking into this. I started a new wicket project from scratch using Wicket maven archetype, and it does work as expected! Then I checked into my project to find the difference, and tt turns out that this issue will occur as long as below code is added in wicket WebApplication.init():
>
>
>          getComponentInstantiationListeners().add(new IComponentInstantiationListener() {
>              
>              @Override
>              public void onInstantiation(Component component) {
>                  component.add(new Behavior() {
>
>                  });
>              }
>              
>          });
>
> It seems that the instantiation listener adds the behavior to the page at very start of the page constructor, and then the page is marked as dirty to cause onInitialize() being called afterwards. Is this a bug or expected behavior?
>
>
> Regards
> Robin
>
>
>
> ________________________________
>   From: Sven Meier <sv...@meiers.net>
> To: users@wicket.apache.org
> Sent: Thursday, March 27, 2014 10:49 PM
> Subject: Re: Avoid calling Page.onInitialize if page constructor throws an exception
>   
>
> Hi,
>
> #onInitialize() is not called here with 6.14.0 and 6.15.0-SNAPSHOT.
>
> Regards
> Sven
>
>
> On 03/27/2014 03:30 PM, Robin Shine wrote:
>> Hi All,
>>
>> We are glad to see that the issue WICKET-5387 (Page#onInitialize called after an exception in the constructor of Page) has been resolved in 6.13.0. However when I tried this version (and 6.14.0) with below code, the issue still exist:
>>
>> public class TestPage extends WebPage {
>>
>>        public TestPage() {
>>            throw new RuntimeException("exception");
>>        }
>>
>>        @Override
>>        protected void onInitialize() {
>>            super.onInitialize();
>>            
>>            System.out.println("onInitialize");
>>        }
>>        
>> }
>>
>> As you can see from above code, I intentionally throws an exception in TestPage constructor and hoping that onInitialize() method is not called when I visit that page. But the result is that "onInitialize" is still getting called in this case. Am I understanding WICKET-5387 incorrectly? And is there any approach to prevent onInitialize() from being called in case of a constructor exception? We want this as onInitialize() might rely on some params setup in the constructor, and calling onInitialize() will lead to other exceptions hiding exceptions thrown in constructor.
>>
>> Regards
>>
>> Robin
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org


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


Re: Avoid calling Page.onInitialize if page constructor throws an exception

Posted by Robin Shine <ro...@pmease.com>.
Hi Sven,

Thanks for looking into this. I started a new wicket project from scratch using Wicket maven archetype, and it does work as expected! Then I checked into my project to find the difference, and tt turns out that this issue will occur as long as below code is added in wicket WebApplication.init():


        getComponentInstantiationListeners().add(new IComponentInstantiationListener() {
            
            @Override
            public void onInstantiation(Component component) {
                component.add(new Behavior() {

                });
            }
            
        });

It seems that the instantiation listener adds the behavior to the page at very start of the page constructor, and then the page is marked as dirty to cause onInitialize() being called afterwards. Is this a bug or expected behavior?


Regards
Robin



________________________________
 From: Sven Meier <sv...@meiers.net>
To: users@wicket.apache.org 
Sent: Thursday, March 27, 2014 10:49 PM
Subject: Re: Avoid calling Page.onInitialize if page constructor throws an exception
 

Hi,

#onInitialize() is not called here with 6.14.0 and 6.15.0-SNAPSHOT.

Regards
Sven


On 03/27/2014 03:30 PM, Robin Shine wrote:
> Hi All,
>
> We are glad to see that the issue WICKET-5387 (Page#onInitialize called after an exception in the constructor of Page) has been resolved in 6.13.0. However when I tried this version (and 6.14.0) with below code, the issue still exist:
>
> public class TestPage extends WebPage {
>
>      public TestPage() {
>          throw new RuntimeException("exception");
>      }
>
>      @Override
>      protected void onInitialize() {
>          super.onInitialize();
>          
>          System.out.println("onInitialize");
>      }
>      
> }
>
> As you can see from above code, I intentionally throws an exception in TestPage constructor and hoping that onInitialize() method is not called when I visit that page. But the result is that "onInitialize" is still getting called in this case. Am I understanding WICKET-5387 incorrectly? And is there any approach to prevent onInitialize() from being called in case of a constructor exception? We want this as onInitialize() might rely on some params setup in the constructor, and calling onInitialize() will lead to other exceptions hiding exceptions thrown in constructor.
>
> Regards
>
> Robin
>


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

Re: Avoid calling Page.onInitialize if page constructor throws an exception

Posted by Sven Meier <sv...@meiers.net>.
Hi,

#onInitialize() is not called here with 6.14.0 and 6.15.0-SNAPSHOT.

Regards
Sven


On 03/27/2014 03:30 PM, Robin Shine wrote:
> Hi All,
>
> We are glad to see that the issue WICKET-5387 (Page#onInitialize called after an exception in the constructor of Page) has been resolved in 6.13.0. However when I tried this version (and 6.14.0) with below code, the issue still exist:
>
> public class TestPage extends WebPage {
>
>      public TestPage() {
>          throw new RuntimeException("exception");
>      }
>
>      @Override
>      protected void onInitialize() {
>          super.onInitialize();
>          
>          System.out.println("onInitialize");
>      }
>      
> }
>
> As you can see from above code, I intentionally throws an exception in TestPage constructor and hoping that onInitialize() method is not called when I visit that page. But the result is that "onInitialize" is still getting called in this case. Am I understanding WICKET-5387 incorrectly? And is there any approach to prevent onInitialize() from being called in case of a constructor exception? We want this as onInitialize() might rely on some params setup in the constructor, and calling onInitialize() will lead to other exceptions hiding exceptions thrown in constructor.
>
> Regards
>
> Robin
>


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