1 package org.eclipse.equinox.http.servlet.tests; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.net.URLEncoder; 6 import java.util.Dictionary; 7 import java.util.Hashtable; 8 import java.util.concurrent.atomic.AtomicReference; 9 10 import javax.servlet.Servlet; 11 import javax.servlet.http.HttpServlet; 12 import javax.servlet.http.HttpServletRequest; 13 import javax.servlet.http.HttpServletResponse; 14 15 import org.eclipse.equinox.http.servlet.testbase.BaseTest; 16 import org.junit.Assert; 17 import org.junit.Test; 18 import org.osgi.service.http.whiteboard.HttpWhiteboardConstants; 19 20 public class Bug562843_2_Test extends BaseTest { 21 22 @Test test_Bug562843_testEncodedSpace()23 public void test_Bug562843_testEncodedSpace() throws Exception { 24 final AtomicReference<String> requestURI = new AtomicReference<>(); 25 final AtomicReference<String> servletPath = new AtomicReference<>(); 26 final AtomicReference<String> pathInfo = new AtomicReference<>(); 27 Servlet servlet = new HttpServlet() { 28 private static final long serialVersionUID = 1L; 29 @Override 30 protected void doGet( 31 final HttpServletRequest req, final HttpServletResponse resp) 32 throws IOException { 33 requestURI.set(req.getRequestURI()); 34 servletPath.set(req.getServletPath()); 35 pathInfo.set(req.getPathInfo()); 36 PrintWriter writer = resp.getWriter(); 37 writer.write("OK"); 38 } 39 }; 40 Dictionary<String, Object> props = new Hashtable<>(); 41 props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "Bug 562843"); 42 props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/Bug562843/*"); 43 registrations.add(getBundleContext().registerService(Servlet.class, servlet, props)); 44 String path = "Bug562843/" + URLEncoder.encode("topic .html", "UTF-8"); 45 String result = requestAdvisor.request(path); 46 Assert.assertEquals("OK", result); 47 Assert.assertEquals("/Bug562843/topic+.html", requestURI.get()); 48 Assert.assertEquals("/Bug562843", servletPath.get()); 49 Assert.assertEquals("/topic .html", pathInfo.get()); 50 } 51 52 53 @Test test_Bug562843_testEncodedPercentSign()54 public void test_Bug562843_testEncodedPercentSign() throws Exception { 55 final AtomicReference<String> requestURI = new AtomicReference<>(); 56 final AtomicReference<String> servletPath = new AtomicReference<>(); 57 final AtomicReference<String> pathInfo = new AtomicReference<>(); 58 Servlet servlet = new HttpServlet() { 59 private static final long serialVersionUID = 1L; 60 @Override 61 protected void doGet( 62 final HttpServletRequest req, final HttpServletResponse resp) 63 throws IOException { 64 requestURI.set(req.getRequestURI()); 65 servletPath.set(req.getServletPath()); 66 pathInfo.set(req.getPathInfo()); 67 PrintWriter writer = resp.getWriter(); 68 writer.write("OK"); 69 } 70 }; 71 Dictionary<String, Object> props = new Hashtable<>(); 72 props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "Bug 562843"); 73 props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/Bug562843/*"); 74 registrations.add(getBundleContext().registerService(Servlet.class, servlet, props)); 75 String path = "Bug562843/" + URLEncoder.encode("topic%.html", "UTF-8"); 76 String result = requestAdvisor.request(path); 77 Assert.assertEquals("OK", result); 78 Assert.assertEquals("/Bug562843/topic%25.html", requestURI.get()); 79 Assert.assertEquals("/Bug562843", servletPath.get()); 80 Assert.assertEquals("/topic%.html", pathInfo.get()); 81 } 82 83 } 84