diff options
author | Bjørn Christian Seime <bjorncs@oath.com> | 2018-01-30 13:04:06 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@oath.com> | 2018-02-01 10:33:22 +0100 |
commit | 8aec10e053614a2cdc6459eaca41913a0dfe306f (patch) | |
tree | 6449e68e3477e5590ee76990a1df1e473b6af838 /jdisc_http_service | |
parent | 5abfb3b646244299f09bdcfc9e9f13d756334846 (diff) |
Refactor uri creation logic into separate method
Diffstat (limited to 'jdisc_http_service')
2 files changed, 27 insertions, 16 deletions
diff --git a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java index 850e61f1842..35e8276310d 100644 --- a/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java +++ b/jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java @@ -83,19 +83,7 @@ public class AccessLogRequestLog extends AbstractLifeCycle implements RequestLog public static void populateAccessLogEntryFromHttpServletRequest( final HttpServletRequest request, final AccessLogEntry accessLogEntry) { - final String quotedPath = request.getRequestURI(); - final String quotedQuery = request.getQueryString(); - try { - final StringBuilder uriBuffer = new StringBuilder(); - uriBuffer.append(quotedPath); - if (quotedQuery != null) { - uriBuffer.append('?').append(quotedQuery); - } - final URI uri = new URI(uriBuffer.toString()); - accessLogEntry.setURI(uri); - } catch (URISyntaxException e) { - setUriFromMalformedInput(accessLogEntry, quotedPath, quotedQuery); - } + setUriFromRequest(request, accessLogEntry); final String remoteAddress = getRemoteAddress(request); final int remotePort = getRemotePort(request); @@ -142,16 +130,38 @@ public class AccessLogRequestLog extends AbstractLifeCycle implements RequestLog .orElseGet(request::getRemotePort); } - private static void setUriFromMalformedInput(final AccessLogEntry accessLogEntry, final String quotedPath, final String quotedQuery) { + @SuppressWarnings("deprecation") + private static void setUriFromRequest(HttpServletRequest request, AccessLogEntry accessLogEntry) { + tryCreateUriFromRequest(request) + .ifPresent(accessLogEntry::setURI); // setURI is deprecated + } + + // This is a mess and does not work correctly + private static Optional<URI> tryCreateUriFromRequest(HttpServletRequest request) { + final String quotedQuery = request.getQueryString(); + final String quotedPath = request.getRequestURI(); + try { + final StringBuilder uriBuffer = new StringBuilder(); + uriBuffer.append(quotedPath); + if (quotedQuery != null) { + uriBuffer.append('?').append(quotedQuery); + } + return Optional.of(new URI(uriBuffer.toString())); + } catch (URISyntaxException e) { + return setUriFromMalformedInput(quotedPath, quotedQuery); + } + } + + private static Optional<URI> setUriFromMalformedInput(final String quotedPath, final String quotedQuery) { try { final String scheme = null; final String authority = null; final String fragment = null; - final URI uri = new URI(scheme, authority, unquote(quotedPath), unquote(quotedQuery), fragment); - accessLogEntry.setURI(uri); + return Optional.of(new URI(scheme, authority, unquote(quotedPath), unquote(quotedQuery), fragment)); } catch (URISyntaxException e) { // I have no idea how this can happen here now... logger.log(Level.WARNING, "Could not convert String URI to URI object", e); + return Optional.empty(); } } diff --git a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLogTest.java b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLogTest.java index 1faf6d37d5f..cf08346d4fb 100644 --- a/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLogTest.java +++ b/jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLogTest.java @@ -17,6 +17,7 @@ import static org.mockito.Mockito.when; /** * @author bakksjo */ +@SuppressWarnings("deprecation") // AccessLogEntry.setURI/getURI are deprecated public class AccessLogRequestLogTest { @Test public void requireThatQueryWithUnquotedSpecialCharactersIsHandled() { |