Author: jbq
Date: Mon Mar  5 10:02:04 2007
New Revision: 514752

URL: http://svn.apache.org/viewvc?view=rev&rev=514752
Log:
WICKET-313 Use standard exception handling in AjaxRequestTarget

Modified:
    
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java
    
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/protocol/http/WebResponseTest.java

Modified: 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java?view=diff&rev=514752&r1=514751&r2=514752
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java
 (original)
+++ 
incubator/wicket/branches/wicket-1.x/wicket/src/main/java/wicket/ajax/AjaxRequestTarget.java
 Mon Mar  5 10:02:04 2007
@@ -142,7 +142,7 @@
         * 
         * @author Igor Vaynberg (ivaynberg)
         */
-       private final class EncodingResponse extends Response
+       private final class EncodingResponse extends WebResponse
        {
                private final AppendingStringBuffer buffer = new 
AppendingStringBuffer(256);
 
@@ -157,7 +157,9 @@
                 */
                public EncodingResponse(Response originalResponse)
                {
+                       
super(((WebResponse)originalResponse).getHttpServletResponse());
                        this.originalResponse = originalResponse;
+                       setAjax(true);
                }
 
                /**
@@ -439,8 +441,6 @@
         */
        public final void respond(final RequestCycle requestCycle)
        {
-               try
-               {
                        final Application app = Application.get();
 
                        // Determine encoding
@@ -461,6 +461,7 @@
                        response.write("\"?>");
                        response.write("<ajax-response>");
 
+                       // invoke onbeforerespond event on listeners
                        fireOnBeforeRespondListeners();
 
                        // normal behavior
@@ -483,17 +484,7 @@
                                respondInvocation(response, js);
                        }
 
-
                        response.write("</ajax-response>");
-               }
-               catch (RuntimeException ex)
-               {
-                       // log the error but output nothing in the response, 
parse
-                       // failure
-                       // of response will cause any javascript failureHandler 
to be
-                       // invoked
-                       LOG.error("Error while responding to an AJAX request: " 
+ toString(), ex);
-               }
        }
 
        private void fireOnBeforeRespondListeners()
@@ -633,7 +624,6 @@
                return str.replaceAll("]", "]^");
        }
 
-
        /**
         * @return name of encoding used to possibly encode the contents of the
         *         CDATA blocks
@@ -700,6 +690,7 @@
                page.startComponentRender(component);
                component.renderComponent();
 
+               // render any associated headers of the component
                respondHeaderContribution(response, component);
 
                page.endComponentRender(component);
@@ -977,4 +968,4 @@
 
                encodingBodyResponse.reset();
        }
-}
\ No newline at end of file
+}

Modified: 
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/protocol/http/WebResponseTest.java
URL: 
http://svn.apache.org/viewvc/incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/protocol/http/WebResponseTest.java?view=diff&rev=514752&r1=514751&r2=514752
==============================================================================
--- 
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/protocol/http/WebResponseTest.java
 (original)
+++ 
incubator/wicket/branches/wicket-1.x/wicket/src/test/java/wicket/protocol/http/WebResponseTest.java
 Mon Mar  5 10:02:04 2007
@@ -18,6 +18,13 @@
 
 import junit.framework.TestCase;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import wicket.ajax.AjaxEventBehavior;
+import wicket.ajax.markup.html.AjaxLink;
+import wicket.util.tester.WicketTester;
+
 /**
  * 
  * 
@@ -25,6 +32,8 @@
  */
 public class WebResponseTest extends TestCase
 {
+       private static final Log log = LogFactory.getLog(WebResponseTest.class);
+
        /**
         * Test that redirect works correctly when not using ajax
         */
@@ -54,5 +63,37 @@
 
                assertNull(mockResponse.getRedirectLocation());
                assertTrue(mockResponse.containsHeader("Ajax-Location"));
+       }
+
+       public void testErrorPage()
+       {
+               WicketTester tester = new WicketTester();
+               tester.startPage(TestPage.class);
+               AjaxLink link = 
(AjaxLink)tester.getComponentFromLastRenderedPage("link");
+               
+               // Cannot use executeAjaxEvent or onClick because WicketTester 
creates an AjaxRequestTarget from scratch
+               //tester.executeAjaxEvent(link, "onclick");
+               //tester.clickLink("link");
+
+               // FIXME should not be needed
+               tester.createRequestCycle();
+
+               // Invoke the call back URL of the ajax event behavior
+               String callbackUrl = 
((AjaxEventBehavior)link.getBehaviors().get(0)).getCallbackUrl().toString();
+               tester.setupRequestAndResponse();
+               // Fake an Ajax request
+               
((MockHttpServletRequest)tester.getServletRequest()).addHeader("Wicket-Ajax", 
"Yes");
+               tester.getServletRequest().setURL(callbackUrl);
+
+               // Do not call tester.processRequestCycle() because it throws 
an exception when getting an error page
+               WebRequestCycle cycle = tester.createRequestCycle();
+               cycle.request();
+
+               
assertNull(((MockHttpServletResponse)tester.getWicketResponse().getHttpServletResponse()).getRedirectLocation());
+               String ajaxLocation = 
((MockHttpServletResponse)tester.getWicketResponse().getHttpServletResponse()).getHeader("Ajax-Location");
+               log.debug(ajaxLocation);
+               assertNotNull(ajaxLocation);
+
+               tester.destroy();
        }
 }


Reply via email to