From: Tomas M. <to...@us...> - 2011-01-21 19:11:58
|
Update of /cvsroot/unitime/UniTime/JavaSource/org/unitime/timetable/filter In directory sfp-cvsdas-2.v30.ch3.sourceforge.com:/tmp/cvs-serv13887/JavaSource/org/unitime/timetable/filter Modified Files: QueryLogFilter.java Log Message: Apache Tomcat 7 Compatibility Issues - fixed the AbstractMethodError in QueryLogFilter (by changing the HttpServletRequestWrapper to be a Java Proxy) Index: QueryLogFilter.java =================================================================== RCS file: /cvsroot/unitime/UniTime/JavaSource/org/unitime/timetable/filter/QueryLogFilter.java,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** QueryLogFilter.java 1 Dec 2010 11:10:47 -0000 1.2 --- QueryLogFilter.java 21 Jan 2011 19:11:49 -0000 1.3 *************** *** 20,29 **** package org.unitime.timetable.filter; - import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; ! import java.io.UnsupportedEncodingException; ! import java.security.Principal; import java.util.ArrayList; import java.util.Date; --- 20,30 ---- package org.unitime.timetable.filter; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; ! import java.io.OutputStream; ! import java.lang.reflect.InvocationHandler; ! import java.lang.reflect.Method; ! import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.Date; *************** *** 31,36 **** import java.util.HashSet; import java.util.List; - import java.util.Locale; - import java.util.Map; import java.util.Vector; --- 32,35 ---- *************** *** 38,49 **** import javax.servlet.FilterChain; import javax.servlet.FilterConfig; - import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; - import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; - import javax.servlet.http.HttpSession; import net.sf.cpsolver.ifs.util.JProf; --- 37,45 ---- *************** *** 89,96 **** } catch (IllegalStateException e) {} if (request instanceof HttpServletRequest) { HttpServletRequest r = (HttpServletRequest)request; ! if (r.getRequestURI().endsWith(".gwt")) ! request = new HttpServletRequestWrapper(r); } --- 85,95 ---- } catch (IllegalStateException e) {} + HttpServletRequestWrapper wrapper = null; if (request instanceof HttpServletRequest) { HttpServletRequest r = (HttpServletRequest)request; ! if (r.getRequestURI().endsWith(".gwt")) { ! wrapper = new HttpServletRequestWrapper(r); ! request = wrapper.createRequest(); ! } } *************** *** 130,136 **** } } catch (IllegalStateException e) {} ! if (r instanceof HttpServletRequestWrapper && ((HttpServletRequestWrapper)r).getBody() != null) { try { ! String body = new String(((HttpServletRequestWrapper)r).getBody()); q.setQuery(body); String args[] = body.split("\\|"); --- 129,135 ---- } } catch (IllegalStateException e) {} ! if (wrapper != null && wrapper.getBody() != null) { try { ! String body = new String(wrapper.getBody()); q.setQuery(body); String args[] = body.split("\\|"); *************** *** 225,468 **** } ! private static class HttpServletRequestWrapper implements HttpServletRequest { private HttpServletRequest iRequest; ! private ServletInputStreamWrapper iInputStream = null; public HttpServletRequestWrapper(HttpServletRequest r) { iRequest = r; } ! @Override ! public String getAuthType() { ! return iRequest.getAuthType(); ! } ! @Override ! public String getContextPath() { ! return iRequest.getContextPath(); ! } ! @Override ! public Cookie[] getCookies() { ! return iRequest.getCookies(); ! } ! @Override ! public long getDateHeader(String name) { ! return iRequest.getDateHeader(name); ! } ! @Override ! public String getHeader(String name) { ! return iRequest.getHeader(name); ! } ! @Override ! public Enumeration getHeaderNames() { ! return iRequest.getHeaderNames(); ! } ! @Override ! public Enumeration getHeaders(String name) { ! return iRequest.getHeaders(name); ! } ! @Override ! public int getIntHeader(String name) { ! return iRequest.getIntHeader(name); ! } ! @Override ! public String getMethod() { ! return iRequest.getMethod(); ! } ! @Override ! public String getPathInfo() { ! return iRequest.getPathInfo(); ! } ! @Override ! public String getPathTranslated() { ! return iRequest.getPathTranslated(); ! } ! @Override ! public String getQueryString() { ! return iRequest.getQueryString(); ! } ! @Override ! public String getRemoteUser() { ! return iRequest.getRemoteUser(); ! } ! @Override ! public String getRequestURI() { ! return iRequest.getRequestURI(); ! } ! @Override ! public StringBuffer getRequestURL() { ! return iRequest.getRequestURL(); ! } ! @Override ! public String getRequestedSessionId() { ! return iRequest.getRequestedSessionId(); ! } ! @Override ! public String getServletPath() { ! return iRequest.getServletPath(); ! } ! @Override ! public HttpSession getSession() { ! return iRequest.getSession(); ! } ! @Override ! public HttpSession getSession(boolean create) { ! return iRequest.getSession(create); ! } ! @Override ! public Principal getUserPrincipal() { ! return iRequest.getUserPrincipal(); ! } ! @Override ! public boolean isRequestedSessionIdFromCookie() { ! return iRequest.isRequestedSessionIdFromCookie(); ! } ! @Override ! public boolean isRequestedSessionIdFromURL() { ! return iRequest.isRequestedSessionIdFromURL(); ! } ! @Override ! @Deprecated ! public boolean isRequestedSessionIdFromUrl() { ! return iRequest.isRequestedSessionIdFromUrl(); ! } ! @Override ! public boolean isRequestedSessionIdValid() { ! return iRequest.isRequestedSessionIdValid(); ! } ! @Override ! public boolean isUserInRole(String role) { ! return iRequest.isUserInRole(role); ! } ! @Override ! public Object getAttribute(String name) { ! return iRequest.getAttribute(name); ! } ! @Override ! public Enumeration getAttributeNames() { ! return iRequest.getAttributeNames(); ! } ! @Override ! public String getCharacterEncoding() { ! return iRequest.getCharacterEncoding(); ! } ! @Override ! public int getContentLength() { ! return iRequest.getContentLength(); } @Override ! public String getContentType() { ! return iRequest.getContentType(); } ! @Override public ServletInputStream getInputStream() throws IOException { ! if (iInputStream == null) ! iInputStream = new ServletInputStreamWrapper(iRequest.getInputStream()); return iInputStream; } public byte[] getBody() { ! return (iInputStream == null ? null : iInputStream.getBytes()); ! } ! @Override ! public String getLocalAddr() { ! return iRequest.getLocalAddr(); ! } ! @Override ! public String getLocalName() { ! return iRequest.getLocalName(); ! } ! @Override ! public int getLocalPort() { ! return iRequest.getLocalPort(); ! } ! @Override ! public Locale getLocale() { ! return iRequest.getLocale(); ! } ! @Override ! public Enumeration getLocales() { ! return iRequest.getLocales(); ! } ! @Override ! public String getParameter(String name) { ! return iRequest.getParameter(name); ! } ! @Override ! public Map getParameterMap() { ! return iRequest.getParameterMap(); ! } ! @Override ! public Enumeration getParameterNames() { ! return iRequest.getParameterNames(); ! } ! @Override ! public String[] getParameterValues(String name) { ! return iRequest.getParameterValues(name); ! } ! @Override ! public String getProtocol() { ! return iRequest.getProtocol(); ! } ! @Override ! public BufferedReader getReader() throws IOException { ! return iRequest.getReader(); ! } ! @Override ! @Deprecated ! public String getRealPath(String path) { ! return iRequest.getRealPath(path); ! } ! @Override ! public String getRemoteAddr() { ! return iRequest.getRemoteAddr(); ! } ! @Override ! public String getRemoteHost() { ! return iRequest.getRemoteHost(); ! } ! @Override ! public int getRemotePort() { ! return iRequest.getRemotePort(); ! } ! @Override ! public RequestDispatcher getRequestDispatcher(String path) { ! return iRequest.getRequestDispatcher(path); ! } ! @Override ! public String getScheme() { ! return iRequest.getScheme(); ! } ! @Override ! public String getServerName() { ! return iRequest.getServerName(); ! } ! @Override ! public int getServerPort() { ! return iRequest.getServerPort(); ! } ! @Override ! public boolean isSecure() { ! return iRequest.isSecure(); ! } ! @Override ! public void removeAttribute(String name) { ! iRequest.removeAttribute(name); ! } ! @Override ! public void setAttribute(String name, Object o) { ! iRequest.setAttribute(name, o); } ! @Override ! public void setCharacterEncoding(String env) ! throws UnsupportedEncodingException { ! iRequest.setCharacterEncoding(env); ! } } private static class ServletInputStreamWrapper extends ServletInputStream { private InputStream iInputStream; ! private ByteArrayOutputStream iBytes; ! public ServletInputStreamWrapper(InputStream is) { ! iBytes = new ByteArrayOutputStream(); ! iInputStream = is; } --- 224,269 ---- } ! private static class HttpServletRequestWrapper implements InvocationHandler { private HttpServletRequest iRequest; ! private ServletInputStream iInputStream = null; ! private ByteArrayOutputStream iBody = null; public HttpServletRequestWrapper(HttpServletRequest r) { iRequest = r; } ! ! public HttpServletRequest createRequest() { ! return (HttpServletRequest)Proxy.newProxyInstance(QueryLogFilter.class.getClassLoader(), new Class[] {HttpServletRequest.class}, this); } + @Override ! public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { ! if ("getInputStream".equals(method.getName()) && method.getParameterTypes().length == 0) ! return getInputStream(); ! return iRequest.getClass().getMethod(method.getName(),method.getParameterTypes()).invoke(iRequest, args); } ! public ServletInputStream getInputStream() throws IOException { ! if (iInputStream == null) { ! iBody = new ByteArrayOutputStream(); ! iInputStream = new ServletInputStreamWrapper(iRequest.getInputStream(), iBody); ! } return iInputStream; } + public byte[] getBody() { ! return (iBody == null ? null : iBody.toByteArray()); } ! ! } private static class ServletInputStreamWrapper extends ServletInputStream { private InputStream iInputStream; ! private OutputStream iOutputStream; ! public ServletInputStreamWrapper(InputStream in, OutputStream out) { ! iInputStream = in; ! iOutputStream = out; } *************** *** 470,474 **** public int read() throws IOException { int out = iInputStream.read(); ! iBytes.write(out); return out; } --- 271,275 ---- public int read() throws IOException { int out = iInputStream.read(); ! iOutputStream.write(out); return out; } *************** *** 477,486 **** public void close() throws IOException { iInputStream.close(); ! iBytes.flush(); ! iBytes.close(); ! } ! ! public byte[] getBytes() { ! return iBytes.toByteArray(); } } --- 278,283 ---- public void close() throws IOException { iInputStream.close(); ! iOutputStream.flush(); ! iOutputStream.close(); } } |