package org.jboss.resteasy.plugins.server.tjws; import org.jboss.resteasy.resteasy_jaxrs.i18n.Messages; import org.jboss.resteasy.util.Encode; import org.jboss.resteasy.util.HttpServletRequestDelegate; import javax.servlet.http.HttpServletRequest; import java.net.MalformedURLException; import java.net.URI; import java.net.URL; /** * fix bug in non-encoded getRequestURI and URL * as well as the correct context Path. * * @author <a href="mailto:bill@burkecentral.com">Bill Burke</a> * @version $Revision: 1 $ * * @deprecated See resteasy-undertow module. */ @Deprecated public class PatchedHttpServletRequest extends HttpServletRequestDelegate { private URI encodedURI; private URL encodedURL; private String contextPath; public PatchedHttpServletRequest(HttpServletRequest delegate, String contextPath) { super(delegate); this.contextPath = contextPath; URL url = null; try { url = new URL(delegate.getRequestURL().toString()); } catch (MalformedURLException e) { throw new RuntimeException(e); } String buf = extractURI(url); try { encodedURI = URI.create(buf); } catch (Exception e) { throw new RuntimeException(Messages.MESSAGES.unableToCreateURI(buf), e); } try { encodedURL = new URL(encodedURI.toString()); } catch (MalformedURLException e) { throw new RuntimeException(e); } } private static String extractURI(URL url) { StringBuffer buffer = new StringBuffer(url.getProtocol()).append("://"); if (url.getHost() != null) buffer.append(url.getHost()); if (url.getPort() != -1 && url.getPort() != 80) buffer.append(":").append(Integer.toString(url.getPort())); if (url.getPath() != null) buffer.append(Encode.encodePath(url.getPath())); if (url.getQuery() != null) buffer.append("?").append(url.getQuery()); if (url.getRef() != null) buffer.append("#").append(Encode.encodeFragment(url.getRef())); String buf = buffer.toString(); return buf; } @Override public String getContextPath() { return contextPath; } @Override public String getRequestURI() { return encodedURI.getRawPath(); } @Override public StringBuffer getRequestURL() { return new StringBuffer(encodedURL.toString()); } }