Repository: cxf
Updated Branches:
  refs/heads/master 670788329 -> 161e10bb2


Add an error handler for Jetty 9 that doesn't let the details escape.
ALL tests now pass with Jetty 9


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/161e10bb
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/161e10bb
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/161e10bb

Branch: refs/heads/master
Commit: 161e10bb2d87573974b8a1748f023c47ebbe5d49
Parents: 6707883
Author: Daniel Kulp <dk...@apache.org>
Authored: Mon Aug 11 12:43:03 2014 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Mon Aug 11 12:43:30 2014 -0400

----------------------------------------------------------------------
 .../http_jetty/JettyHTTPServerEngine.java       | 31 ++++++++++++++++++++
 .../jaxrs/JAXRSClientServerBookTest.java        | 20 ++++++++++---
 2 files changed, 47 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/161e10bb/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
----------------------------------------------------------------------
diff --git 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
index 26d72a0..a3c77c9 100644
--- 
a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
+++ 
b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java
@@ -21,6 +21,7 @@ package org.apache.cxf.transport.http_jetty;
 
 import java.io.Closeable;
 import java.io.IOException;
+import java.io.Writer;
 import java.net.URL;
 import java.security.GeneralSecurityException;
 import java.util.ArrayList;
@@ -34,7 +35,10 @@ import javax.annotation.PostConstruct;
 import javax.net.ssl.KeyManager;
 import javax.net.ssl.SSLContext;
 import javax.net.ssl.X509KeyManager;
+import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.common.classloader.ClassLoaderUtils;
@@ -49,15 +53,19 @@ import 
org.apache.cxf.configuration.security.ClientAuthentication;
 import org.apache.cxf.interceptor.Fault;
 import org.apache.cxf.transport.HttpUriMapper;
 import org.apache.cxf.transport.https.AliasedX509ExtendedKeyManager;
+import org.eclipse.jetty.http.HttpStatus;
 import org.eclipse.jetty.security.SecurityHandler;
 import org.eclipse.jetty.server.AbstractConnector;
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.Handler;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Response;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.server.SessionManager;
 import org.eclipse.jetty.server.handler.ContextHandler;
 import org.eclipse.jetty.server.handler.ContextHandlerCollection;
 import org.eclipse.jetty.server.handler.DefaultHandler;
+import org.eclipse.jetty.server.handler.ErrorHandler;
 import org.eclipse.jetty.server.handler.HandlerCollection;
 import org.eclipse.jetty.server.session.HashSessionIdManager;
 import org.eclipse.jetty.server.session.HashSessionManager;
@@ -337,6 +345,29 @@ public class JettyHTTPServerEngine
         if (s == null) {
             s = new Server();
         }
+        if (!Server.getVersion().startsWith("8")) {
+            //need an error handler that won't leak information about the 
exception 
+            //back to the client.
+            ErrorHandler eh = new ErrorHandler() {
+                @SuppressWarnings("deprecation")
+                public void handle(String target, Request baseRequest, 
+                                   HttpServletRequest request, 
HttpServletResponse response) 
+                    throws IOException {
+                    String msg = HttpStatus.getMessage(response.getStatus());
+                    request.setAttribute(RequestDispatcher.ERROR_MESSAGE, msg);
+                    if (response instanceof Response) {
+                        ((Response)response).setStatus(response.getStatus(), 
msg);
+                    }
+                    super.handle(target, baseRequest, request, response);
+                }
+                protected void writeErrorPage(HttpServletRequest request, 
Writer writer, int code,
+                                              String message, boolean 
showStacks)
+                    throws IOException {
+                    super.writeErrorPage(request, writer, code, message, 
false);
+                }
+            };
+            s.addBean(eh);
+        }
         return s;
     }
     

http://git-wip-us.apache.org/repos/asf/cxf/blob/161e10bb/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
----------------------------------------------------------------------
diff --git 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
index c2f355c..ddb4d6c 100644
--- 
a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
+++ 
b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java
@@ -805,9 +805,22 @@ public class JAXRSClientServerBookTest extends 
AbstractBusClientServerTestBase {
     }
     
     @Test
-    public void testPropogateException() throws Exception {
-        getAndCompare("http://localhost:"; + PORT + 
"/bookstore/propagate-exception",
-                      "Error: 500", "application/xml", 500);
+    public void testPropogateException() throws Exception {       
+        GetMethod get = new GetMethod("http://localhost:"; + PORT + 
"/bookstore/propagate-exception");
+        get.setRequestHeader("Accept", "application/xml");
+        get.addRequestHeader("Cookie", "a=b;c=d");
+        get.addRequestHeader("Cookie", "e=f");
+        get.setRequestHeader("Accept-Language", "da;q=0.8,en");
+        get.setRequestHeader("Book", "1,2,3");
+        HttpClient httpClient = new HttpClient();
+        try {
+            int result = httpClient.executeMethod(get);
+            assertEquals(500, result);
+            String content = 
getStringFromInputStream(get.getResponseBodyAsStream());
+            assertTrue(content.contains("Error") && content.contains("500"));
+        } finally {
+            get.releaseConnection();
+        }        
     }
     
     @Test
@@ -1643,7 +1656,6 @@ public class JAXRSClientServerBookTest extends 
AbstractBusClientServerTestBase {
     @Test
     public void testEmptyResponseProxyNullable() {
         BookStore store = JAXRSClientFactory.create("http://localhost:"; + 
PORT, BookStore.class);
-        WebClient.getConfig(store).getInInterceptors().add(new 
ReplaceStatusInterceptor());
         assertNull(store.getEmptyBookNullable());
     }
     

Reply via email to