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) + } +}