From aabf74302fa1df83c0ebd4e9404c914822900148 Mon Sep 17 00:00:00 2001 From: Nikita Melkozerov Date: Tue, 11 Sep 2018 14:31:07 +0200 Subject: [PATCH] PATCH call not proxied correctly to active node (#6475) (#6522) Summary: added a workaround for http methods unsupported by java JIRA issues: MARATHON-8095 (cherry picked from commit deac8cde0a7d88d180b46a787c19be8a4275b8ec) --- .../JavaUrlConnectionRequestForwarder.scala | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/main/scala/mesosphere/marathon/api/forwarder/JavaUrlConnectionRequestForwarder.scala b/src/main/scala/mesosphere/marathon/api/forwarder/JavaUrlConnectionRequestForwarder.scala index de23e48c3e4..f2d7f22c36a 100644 --- a/src/main/scala/mesosphere/marathon/api/forwarder/JavaUrlConnectionRequestForwarder.scala +++ b/src/main/scala/mesosphere/marathon/api/forwarder/JavaUrlConnectionRequestForwarder.scala @@ -105,7 +105,7 @@ class JavaUrlConnectionRequestForwarder( } private def copyRequestToConnection(leaderConnection: HttpURLConnection, request: HttpServletRequest): Try[Done] = Try { - leaderConnection.setRequestMethod(request.getMethod) + HttpUrlConnectionWorkaround.setMethod(leaderConnection, request.getMethod) copyRequestHeadersToConnection(leaderConnection, request) copyRequestBodyToConnection(leaderConnection, request) Done @@ -214,3 +214,18 @@ object JavaUrlConnectionRequestForwarder extends StrictLogging { } } } + +/** + * Workaround to overcome Java restrictions; see https://bugs.openjdk.java.net/browse/JDK-7016595 + */ +private[forwarder] object HttpUrlConnectionWorkaround { + private val methodsField = classOf[HttpURLConnection].getDeclaredField("method") + methodsField.setAccessible(true) + + def setMethod(connection: HttpURLConnection, method: String): Unit = { + if (method == "PATCH") + methodsField.set(connection, method) + else + connection.setRequestMethod(method) + } +}