summaryrefslogtreecommitdiffstats
path: root/jdisc_http_service
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@oath.com>2018-01-30 13:04:06 +0100
committerBjørn Christian Seime <bjorncs@oath.com>2018-02-01 10:33:22 +0100
commit8aec10e053614a2cdc6459eaca41913a0dfe306f (patch)
tree6449e68e3477e5590ee76990a1df1e473b6af838 /jdisc_http_service
parent5abfb3b646244299f09bdcfc9e9f13d756334846 (diff)
Refactor uri creation logic into separate method
Diffstat (limited to 'jdisc_http_service')
-rw-r--r--jdisc_http_service/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java42
-rw-r--r--jdisc_http_service/src/test/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLogTest.java1
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() {