diff --git a/core/CHANGELOG.txt b/core/CHANGELOG.txt
index 761ed1dba69d4ac74ddaa3b72516980691c8eeb0..0fdb64c29c85bd3510afafb31b9be89393c12fa3 100644
--- a/core/CHANGELOG.txt
+++ b/core/CHANGELOG.txt
@@ -45,6 +45,7 @@ Drupal 8.0, xxxx-xx-xx (development version)
 - Removed the Overlay module from core.
 - Removed the Garland theme from core.
 - Removed the Statistics module's accesslog functionality and reports from core.
+- Removed XML-RPC functionality from core.
 - Removed backwards-compatibility with 'magic_quotes_gpc'/'magic_quotes_runtime'
   PHP configuration settings. Both are required to be disabled.
 - Universally Unique IDentifier (UUID):
diff --git a/core/MAINTAINERS.txt b/core/MAINTAINERS.txt
index 1f5548335c0e188f5b1896e6cd3aad6d35e74e8d..48c295933cc4ee008dc1bf24e6b58a2016978d0e 100644
--- a/core/MAINTAINERS.txt
+++ b/core/MAINTAINERS.txt
@@ -433,9 +433,6 @@ Views UI module
 - Tim Plunkett 'tim.plunkett' http://drupal.org/user/241634
 - Damian Lee 'damiankloip' http://drupal.org/user/1037976
 
-XML-RPC module
-- Frederic G. Marand 'fgm' http://drupal.org/user/27985
-
 
 Theme maintainers
 -----------------
diff --git a/core/modules/system/core.api.php b/core/modules/system/core.api.php
index 03a711c360b976ea581db2f01de8008be7909d0c..a09da1a550bf42c63f6fa64b77696ebae1681814 100644
--- a/core/modules/system/core.api.php
+++ b/core/modules/system/core.api.php
@@ -144,19 +144,6 @@
  * providing default configuration or configuration import, as outlined in
  * @ref sec_rest above.
  *
- * @section sec_xmlrpc Using XML-RPC
- * In XML-RPC, a web site can set up one or more XML-RPC methods, which it
- * will usually service at a central XML-RPC URL. Drupal Core's XML-RPC module
- * provides both client and server XML-RPC functionality.
- *
- * On the server side, the XML-RPC module sets up URL path xmlrpc.php, which
- * responds to XML-RPC requests. Individual XML-RPC request methods are defined
- * by modules by implementing hook_xmlrpc(); Drupal Core does not define any
- * XML-RPC web service requests by default.
- *
- * On the client side, XML-RPC requests to other web sites that provide XML-RPC
- * web services can be performed in Drupal by using the xmlrpc() function.
- *
  * @section sec_integrate Integrating data from other sites into Drupal
  * If you want to integrate data from other web sites into Drupal, here are
  * some notes:
@@ -176,7 +163,6 @@
  *   - \Drupal\Component\Serialization\Json (JSON encoding and decoding).
  *   - PHP has functions and classes for parsing XML; see
  *     http://php.net/manual/refs.xml.php
- *   - As mentioned above, for XML-RPC requests, use function xmlrpc().
  * @}
  */
 
diff --git a/core/modules/system/src/Tests/Bootstrap/GetFilenameUnitTest.php b/core/modules/system/src/Tests/Bootstrap/GetFilenameUnitTest.php
index c499d3891628f39eeac9ea5b14defabe63097d1c..c4b6c30d12a7629a7c879d32ff1ea974ca8a14a1 100644
--- a/core/modules/system/src/Tests/Bootstrap/GetFilenameUnitTest.php
+++ b/core/modules/system/src/Tests/Bootstrap/GetFilenameUnitTest.php
@@ -29,7 +29,7 @@ function testDrupalGetFilename() {
     // does not exist.
     $this->assertFalse(\Drupal::hasService('keyvalue'), 'The container has no keyvalue service.');
     // Retrieving the location of a module.
-    $this->assertIdentical(drupal_get_filename('module', 'xmlrpc'), 'core/modules/xmlrpc/xmlrpc.info.yml');
+    $this->assertIdentical(drupal_get_filename('module', 'system'), 'core/modules/system/system.info.yml');
 
     // Retrieving the location of a theme.
     $this->assertIdentical(drupal_get_filename('theme', 'stark'), 'core/themes/stark/stark.info.yml');
diff --git a/core/modules/system/src/Tests/Extension/ModuleHandlerTest.php b/core/modules/system/src/Tests/Extension/ModuleHandlerTest.php
index 8d93c7a76ea87c61e76953a71d08f4055493600d..597bb03c43aa53ec352933b1886c1003b335c517 100644
--- a/core/modules/system/src/Tests/Extension/ModuleHandlerTest.php
+++ b/core/modules/system/src/Tests/Extension/ModuleHandlerTest.php
@@ -116,7 +116,7 @@ function testDependencyResolution() {
     $this->assertFalse($this->moduleHandler()->moduleExists('color'), 'ModuleHandler::install() aborts if dependencies are missing.');
 
     // Fix the missing dependency.
-    // Forum module depends on Ban. Ban depends on XML-RPC module.
+    // Color module depends on Config. Config depends on Help module.
     \Drupal::state()->set('module_test.dependency', 'dependency');
     drupal_static_reset('system_rebuild_module_data');
 
@@ -145,9 +145,9 @@ function testDependencyResolution() {
     $uninstalled_modules = \Drupal::state()->get('module_test.uninstall_order') ?: array();
     $this->assertEqual($uninstalled_modules, array('color', 'config', 'help'), 'Modules were uninstalled in the correct order.');
 
-    // Enable forum module again, which should enable both the ban module and
-    // XML-RPC module. But, this time do it with ban module declaring a
-    // dependency on a specific version of XML-RPC module in its info file. Make
+    // Enable Color module again, which should enable both the Config module and
+    // Help module. But, this time do it with Config module declaring a
+    // dependency on a specific version of Help module in its info file. Make
     // sure that Drupal\Core\Extension\ModuleHandler::install() still works.
     \Drupal::state()->set('module_test.dependency', 'version dependency');
     drupal_static_reset('system_rebuild_module_data');
@@ -163,12 +163,7 @@ function testDependencyResolution() {
 
     // Finally, verify that the modules were enabled in the correct order.
     $enable_order = \Drupal::state()->get('module_test.install_order') ?: array();
-    $help_position = array_search('help', $enable_order);
-    $config_position = array_search('config', $enable_order);
-    $color_position = array_search('color', $enable_order);
-    $xmlrpc_before_ban = $help_position !== FALSE && $config_position !== FALSE && $help_position < $config_position;
-    $ban_before_forum = $config_position !== FALSE && $color_position !== FALSE && $config_position < $color_position;
-    $this->assertTrue($xmlrpc_before_ban && $ban_before_forum, 'Modules were enabled in the correct order.');
+    $this->assertIdentical($enable_order, array('help', 'config', 'color'));
   }
 
   /**
diff --git a/core/modules/xmlrpc/src/Controller/XmlrpcController.php b/core/modules/xmlrpc/src/Controller/XmlrpcController.php
deleted file mode 100644
index 4abbf3da24d79094c31e5a9832f4ff26ea7a2d5f..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/src/Controller/XmlrpcController.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\xmlrpc\Controller\XmlrpcController.
- */
-
-namespace Drupal\xmlrpc\Controller;
-
-/**
- * Contains controller methods for the XML-RPC module.
- */
-class XmlrpcController {
-
-  /**
-   * @todo Remove xmlrpc_server_page().
-   */
-  public function php() {
-    module_load_include('server.inc', 'xmlrpc');
-    return xmlrpc_server_page();
-  }
-
-}
diff --git a/core/modules/xmlrpc/src/Tests/XmlRpcBasicTest.php b/core/modules/xmlrpc/src/Tests/XmlRpcBasicTest.php
deleted file mode 100644
index ae57107689b79d823da14f4701a3327e3e103b46..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/src/Tests/XmlRpcBasicTest.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Drupal\xmlrpc\Tests\XmlRpcBasicTest.
- */
-
-namespace Drupal\xmlrpc\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Perform basic XML-RPC tests that do not require addition callbacks.
- *
- * @group xmlrpc
- */
-class XmlRpcBasicTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('xmlrpc');
-
-  /**
-   * Ensure that a basic XML-RPC call with no parameters works.
-   */
-  protected function testListMethods() {
-    // Minimum list of methods that should be included.
-    $minimum = array(
-      'system.multicall',
-      'system.methodSignature',
-      'system.getCapabilities',
-      'system.listMethods',
-      'system.methodHelp',
-    );
-
-    // Invoke XML-RPC call to get list of methods.
-    $url = url('xmlrpc.php', array('absolute' => TRUE));
-    $methods = xmlrpc($url, array('system.listMethods' => array()));
-
-    // Ensure that the minimum methods were found.
-    $count = 0;
-    foreach ($methods as $method) {
-      if (in_array($method, $minimum)) {
-        $count++;
-      }
-    }
-
-    $this->assertEqual($count, count($minimum), 'system.listMethods returned at least the minimum listing');
-  }
-
-  /**
-   * Ensure that system.methodSignature returns an array of signatures.
-   */
-  protected function testMethodSignature() {
-    $url = url('xmlrpc.php', array('absolute' => TRUE));
-    $signature = xmlrpc($url, array('system.methodSignature' => array('system.listMethods')));
-    $this->assert(is_array($signature) && !empty($signature) && is_array($signature[0]),
-      'system.methodSignature returns an array of signature arrays.');
-  }
-
-  /**
-   * Ensure that XML-RPC correctly handles invalid messages when parsing.
-   */
-  protected function testInvalidMessageParsing() {
-    $invalid_messages = array(
-      array(
-        'message' => xmlrpc_message(''),
-        'assertion' => 'Empty message correctly rejected during parsing.',
-      ),
-      array(
-        'message' => xmlrpc_message('<?xml version="1.0" encoding="ISO-8859-1"?>'),
-        'assertion' => 'Empty message with XML declaration correctly rejected during parsing.',
-      ),
-      array(
-        'message' => xmlrpc_message('<?xml version="1.0"?><params><param><value><string>value</string></value></param></params>'),
-        'assertion' => 'Non-empty message without a valid message type is rejected during parsing.',
-      ),
-      array(
-        'message' => xmlrpc_message('<methodResponse><params><param><value><string>value</string></value></param></methodResponse>'),
-        'assertion' => 'Non-empty malformed message is rejected during parsing.',
-      ),
-    );
-
-    foreach ($invalid_messages as $assertion) {
-      $this->assertFalse(xmlrpc_message_parse($assertion['message']), $assertion['assertion']);
-    }
-  }
-}
diff --git a/core/modules/xmlrpc/src/Tests/XmlRpcMessagesTest.php b/core/modules/xmlrpc/src/Tests/XmlRpcMessagesTest.php
deleted file mode 100644
index 46ea73b02ee35e3ccbe884fbe616fa8d315885e7..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/src/Tests/XmlRpcMessagesTest.php
+++ /dev/null
@@ -1,59 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Drupal\xmlrpc\Tests\XmlRpcMessagesTest.
- */
-
-namespace Drupal\xmlrpc\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * Tests large messages and method alterations.
- *
- * @group xmlrpc
- */
-class XmlRpcMessagesTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('xmlrpc', 'xmlrpc_test');
-
-  /**
-   * Make sure that XML-RPC can transfer large messages.
-   */
-  function testSizedMessages() {
-    $xml_url = url('xmlrpc.php', array('absolute' => TRUE));
-    $sizes = array(8, 80, 160);
-    foreach ($sizes as $size) {
-      $xml_message_l = xmlrpc_test_message_sized_in_kb($size);
-      $xml_message_r = xmlrpc($xml_url, array('messages.messageSizedInKB' => array($size)));
-
-      $this->assertEqual($xml_message_l, $xml_message_r, format_string('XML-RPC messages.messageSizedInKB of %s Kb size received', array('%s' => $size)));
-    }
-  }
-
-  /**
-   * Ensure that hook_xmlrpc_alter() can hide even builtin methods.
-   */
-  protected function testAlterListMethods() {
-    // Ensure xmlrpc_test.alter() is disabled and retrieve regular list of methods.
-    \Drupal::state()->set('xmlrpc_test.alter', FALSE);
-    $url = url('xmlrpc.php', array('absolute' => TRUE));
-    $methods1 = xmlrpc($url, array('system.listMethods' => array()));
-
-    // Enable the alter hook and retrieve the list of methods again.
-    \Drupal::state()->set('xmlrpc_test.alter', TRUE);
-    $methods2 = xmlrpc($url, array('system.listMethods' => array()));
-
-    $diff = array_diff($methods1, $methods2);
-    $this->assertTrue(is_array($diff) && !empty($diff), 'Method list is altered by hook_xmlrpc_alter');
-    $removed = reset($diff);
-    $this->assertEqual($removed, 'system.methodSignature', 'Hiding builting system.methodSignature with hook_xmlrpc_alter works');
-  }
-
-}
diff --git a/core/modules/xmlrpc/src/Tests/XmlRpcValidatorTest.php b/core/modules/xmlrpc/src/Tests/XmlRpcValidatorTest.php
deleted file mode 100644
index 1af8c0678c10731dacfcd5856b2d2182da2900d9..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/src/Tests/XmlRpcValidatorTest.php
+++ /dev/null
@@ -1,126 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Drupal\xmlrpc\Tests\XmlRpcValidatorTest.
- */
-
-namespace Drupal\xmlrpc\Tests;
-
-use Drupal\simpletest\WebTestBase;
-
-/**
- * See <a href="http://www.xmlrpc.com/validator1Docs">the xmlrpc validator1
- * specification</a>.
- *
- * @group xmlrpc
- */
-class XmlRpcValidatorTest extends WebTestBase {
-
-  /**
-   * Modules to enable.
-   *
-   * @var array
-   */
-  public static $modules = array('xmlrpc', 'xmlrpc_test');
-
-  /**
-   * Run validator1 tests.
-   */
-  function testValidator() {
-    $xml_url = url('xmlrpc.php', array('absolute' => TRUE));
-    srand();
-    mt_srand();
-
-    $array_1 = array(array('curly' => mt_rand(-100, 100)),
-                  array('curly' => mt_rand(-100, 100)),
-                  array('larry' => mt_rand(-100, 100)),
-                  array('larry' => mt_rand(-100, 100)),
-                  array('moe' => mt_rand(-100, 100)),
-                  array('moe' => mt_rand(-100, 100)),
-                  array('larry' => mt_rand(-100, 100)));
-    shuffle($array_1);
-    $l_res_1 = xmlrpc_test_arrayOfStructsTest($array_1);
-    $r_res_1 = xmlrpc($xml_url, array('validator1.arrayOfStructsTest' => array($array_1)));
-    $this->assertIdentical($l_res_1, $r_res_1);
-
-    $string_2 = 't\'&>>zf"md>yr>xlcev<h<"k&j<og"w&&>">>uai"np&s>>q\'&b<>"&&&';
-    $l_res_2 = xmlrpc_test_countTheEntities($string_2);
-    $r_res_2 = xmlrpc($xml_url, array('validator1.countTheEntities' => array($string_2)));
-    $this->assertIdentical($l_res_2, $r_res_2);
-
-    $struct_3 = array('moe' => mt_rand(-100, 100), 'larry' => mt_rand(-100, 100), 'curly' => mt_rand(-100, 100), 'homer' => mt_rand(-100, 100));
-    $l_res_3 = xmlrpc_test_easyStructTest($struct_3);
-    $r_res_3 = xmlrpc($xml_url, array('validator1.easyStructTest' => array($struct_3)));
-    $this->assertIdentical($l_res_3, $r_res_3);
-
-    $struct_4 = array('sub1' => array('bar' => 13),
-                    'sub2' => 14,
-                    'sub3' => array('foo' => 1, 'baz' => 2),
-                    'sub4' => array('ss' => array('sss' => array('ssss' => 'sssss'))));
-    $l_res_4 = xmlrpc_test_echoStructTest($struct_4);
-    $r_res_4 = xmlrpc($xml_url, array('validator1.echoStructTest' => array($struct_4)));
-    $this->assertIdentical($l_res_4, $r_res_4);
-
-    $int_5     = mt_rand(-100, 100);
-    $bool_5    = (($int_5 % 2) == 0);
-    $string_5  = $this->randomName();
-    $double_5  = (double)(mt_rand(-1000, 1000) / 100);
-    $time_5    = REQUEST_TIME;
-    $base64_5  = $this->randomName(100);
-    $l_res_5 = xmlrpc_test_manyTypesTest($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), $base64_5);
-    // See http://drupal.org/node/37766 why this currently fails
-    $l_res_5[5] = $l_res_5[5]->data;
-    $r_res_5 = xmlrpc($xml_url, array('validator1.manyTypesTest' => array($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), xmlrpc_base64($base64_5))));
-    // @todo Contains objects, objects are not equal.
-    $this->assertEqual($l_res_5, $r_res_5);
-
-    $size = mt_rand(100, 200);
-    $array_6 = array();
-    for ($i = 0; $i < $size; $i++) {
-      $array_6[] = $this->randomName(mt_rand(8, 12));
-    }
-
-    $l_res_6 = xmlrpc_test_moderateSizeArrayCheck($array_6);
-    $r_res_6 = xmlrpc($xml_url, array('validator1.moderateSizeArrayCheck' => array($array_6)));
-    $this->assertIdentical($l_res_6, $r_res_6);
-
-    $struct_7 = array();
-    for ($y = 2000; $y < 2002; $y++) {
-      for ($m = 3; $m < 5; $m++) {
-        for ($d = 1; $d < 6; $d++) {
-          $ys = (string) $y;
-          $ms = sprintf('%02d', $m);
-          $ds = sprintf('%02d', $d);
-          $struct_7[$ys][$ms][$ds]['moe']   = mt_rand(-100, 100);
-          $struct_7[$ys][$ms][$ds]['larry'] = mt_rand(-100, 100);
-          $struct_7[$ys][$ms][$ds]['curly'] = mt_rand(-100, 100);
-        }
-      }
-    }
-    $l_res_7 = xmlrpc_test_nestedStructTest($struct_7);
-    $r_res_7 = xmlrpc($xml_url, array('validator1.nestedStructTest' => array($struct_7)));
-    $this->assertIdentical($l_res_7, $r_res_7);
-
-
-    $int_8 = mt_rand(-100, 100);
-    $l_res_8 = xmlrpc_test_simpleStructReturnTest($int_8);
-    $r_res_8 = xmlrpc($xml_url, array('validator1.simpleStructReturnTest' => array($int_8)));
-    $this->assertIdentical($l_res_8, $r_res_8);
-
-    /* Now test multicall */
-    $x = array();
-    $x['validator1.arrayOfStructsTest'] = array($array_1);
-    $x['validator1.countTheEntities'] = array($string_2);
-    $x['validator1.easyStructTest'] = array($struct_3);
-    $x['validator1.echoStructTest'] = array($struct_4);
-    $x['validator1.manyTypesTest'] = array($int_5, $bool_5, $string_5, $double_5, xmlrpc_date($time_5), xmlrpc_base64($base64_5));
-    $x['validator1.moderateSizeArrayCheck'] = array($array_6);
-    $x['validator1.nestedStructTest'] = array($struct_7);
-    $x['validator1.simpleStructReturnTest'] = array($int_8);
-
-    $a_l_res = array($l_res_1, $l_res_2, $l_res_3, $l_res_4, $l_res_5, $l_res_6, $l_res_7, $l_res_8);
-    $a_r_res = xmlrpc($xml_url, $x);
-    $this->assertEqual($a_l_res, $a_r_res);
-  }
-}
diff --git a/core/modules/xmlrpc/tests/modules/xmlrpc_test/xmlrpc_test.info.yml b/core/modules/xmlrpc/tests/modules/xmlrpc_test/xmlrpc_test.info.yml
deleted file mode 100644
index 0359f92736b4981822e520be1a581abd7ad33a64..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/tests/modules/xmlrpc_test/xmlrpc_test.info.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: 'XML-RPC Test'
-type: module
-description: 'Support module for XML-RPC tests according to the validator1 specification.'
-package: Testing
-version: VERSION
-core: 8.x
diff --git a/core/modules/xmlrpc/tests/modules/xmlrpc_test/xmlrpc_test.module b/core/modules/xmlrpc/tests/modules/xmlrpc_test/xmlrpc_test.module
deleted file mode 100644
index 320704005369371f1bef9a0ce38f715091e65241..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/tests/modules/xmlrpc_test/xmlrpc_test.module
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-function xmlrpc_test_arrayOfStructsTest($array) {
-  $sum = 0;
-  foreach ($array as $struct) {
-    if (isset($struct['curly'])) {
-      $sum += $struct['curly'];
-    }
-  }
-  return $sum;
-}
-
-function xmlrpc_test_countTheEntities($string) {
-  return array(
-    'ctLeftAngleBrackets' => substr_count($string, '<'),
-    'ctRightAngleBrackets' => substr_count($string, '>'),
-    'ctAmpersands' => substr_count($string, '&'),
-    'ctApostrophes' => substr_count($string, "'"),
-    'ctQuotes' => substr_count($string, '"'),
-  );
-}
-
-function xmlrpc_test_easyStructTest($array) {
-  return $array["curly"] + $array["moe"] + $array["larry"];
-}
-
-function xmlrpc_test_echoStructTest($array) {
-  return $array;
-}
-
-function xmlrpc_test_manyTypesTest($number, $boolean, $string, $double, $dateTime, $base64) {
-  $timestamp = gmmktime($dateTime->hour, $dateTime->minute, $dateTime->second, $dateTime->month, $dateTime->day, $dateTime->year);
-  return array($number, $boolean, $string, $double, xmlrpc_date($timestamp), xmlrpc_Base64($base64));
-}
-
-function xmlrpc_test_moderateSizeArrayCheck($array) {
-  return array_shift($array) . array_pop($array);
-}
-
-function xmlrpc_test_nestedStructTest($array) {
-  return $array["2000"]["04"]["01"]["larry"] + $array["2000"]["04"]["01"]["moe"] + $array["2000"]["04"]["01"]["curly"];
-}
-
-function xmlrpc_test_simpleStructReturnTest($number) {
-  return array("times10" => ($number*10), "times100" => ($number*100), "times1000" => ($number*1000));
-}
-
-/**
- * Implements hook_xmlrpc().
- */
-function xmlrpc_test_xmlrpc() {
-  return array(
-    'validator1.arrayOfStructsTest' => 'xmlrpc_test_arrayOfStructsTest',
-    'validator1.countTheEntities' => 'xmlrpc_test_countTheEntities',
-    'validator1.easyStructTest' => 'xmlrpc_test_easyStructTest',
-    'validator1.echoStructTest' => 'xmlrpc_test_echoStructTest',
-    'validator1.manyTypesTest' => 'xmlrpc_test_manyTypesTest',
-    'validator1.moderateSizeArrayCheck' => 'xmlrpc_test_moderateSizeArrayCheck',
-    'validator1.nestedStructTest' => 'xmlrpc_test_nestedStructTest',
-    'validator1.simpleStructReturnTest' => 'xmlrpc_test_simpleStructReturnTest',
-    'messages.messageSizedInKB' => 'xmlrpc_test_message_sized_in_kb',
-  );
-}
-
-/**
- * Implements hook_xmlrpc_alter().
- *
- * Hide (or not) the system.methodSignature() service depending on a variable.
- */
-function xmlrpc_test_xmlrpc_alter(&$services) {
-  $xmlprc_alter = \Drupal::state()->get('xmlrpc_test.alter') ?: FALSE;
-  if ($xmlprc_alter) {
-    $remove = NULL;
-    foreach ($services as $key => $value) {
-      if (!is_array($value)) {
-        continue;
-      }
-      if ($value[0] == 'system.methodSignature') {
-        $remove = $key;
-        break;
-      }
-    }
-    if (isset($remove)) {
-      unset($services[$remove]);
-    }
-  }
-}
-
-/**
- * Created a message of the desired size in KB.
- *
- * @param $size
- *   Message size in KB.
- * @return array
- *   Generated message structure.
- */
-function xmlrpc_test_message_sized_in_kb($size) {
-  $message = array();
-
-  $word = 'abcdefg';
-
-  // Create a ~1KB sized struct.
-  for ($i = 0 ; $i < 128; $i++) {
-    $line['word_' . $i] = $word;
-  }
-
-  for ($i = 0; $i < $size; $i++) {
-    $message['line_' . $i] = $line;
-  }
-
-  return $message;
-}
diff --git a/core/modules/xmlrpc/xmlrpc.api.php b/core/modules/xmlrpc/xmlrpc.api.php
deleted file mode 100644
index beaacf15afade61cd64ffa245b66427590a8dcce..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/xmlrpc.api.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-
-/**
- * @file
- * Hooks provided by the XML-RPC module.
- */
-
-/**
- * Register XML-RPC callbacks.
- *
- * This hook lets a module register callback functions to be called when
- * particular XML-RPC methods are invoked by a client.
- *
- * @return
- *   An array which maps XML-RPC methods to Drupal functions. Each array
- *   element is either a pair of method => function or an array with four
- *   entries:
- *   - The XML-RPC method name (for example, module.function).
- *   - The Drupal callback function (for example, module_function).
- *   - The method signature is an array of XML-RPC types. The first element
- *     of this array is the type of return value and then you should write a
- *     list of the types of the parameters. XML-RPC types are the following
- *     (See the types at http://www.xmlrpc.com/spec):
- *       - "boolean": 0 (false) or 1 (true).
- *       - "double": a floating point number (for example, -12.214).
- *       - "int": a integer number (for example,  -12).
- *       - "array": an array without keys (for example, array(1, 2, 3)).
- *       - "struct": an associative array or an object (for example,
- *          array('one' => 1, 'two' => 2)).
- *       - "date": when you return a date, then you may either return a
- *          timestamp (time(), mktime() etc.) or an ISO8601 timestamp. When
- *          date is specified as an input parameter, then you get an object,
- *          which is described in the function xmlrpc_date
- *       - "base64": a string containing binary data, automatically
- *          encoded/decoded automatically.
- *       - "string": anything else, typically a string.
- *   - A descriptive help string, enclosed in a t() function for translation
- *     purposes.
- *   Both forms are shown in the example.
- *
- * @ingroup third_party
- */
-function hook_xmlrpc() {
-  return array(
-    'drupal.login' => 'drupal_login',
-    array(
-      'drupal.site.ping',
-      'drupal_directory_ping',
-      array('boolean', 'string', 'string', 'string', 'string', 'string'),
-      t('Handling ping request'))
-  );
-}
-
-/**
- * Alters the definition of XML-RPC methods before they are called.
- *
- * This hook allows modules to modify the callback definition of declared
- * XML-RPC methods, right before they are invoked by a client. Methods may be
- * added, or existing methods may be altered.
- *
- * Note that hook_xmlrpc() supports two distinct and incompatible formats to
- * define a callback, so care must be taken when altering other methods.
- *
- * @param $methods
- *   An asssociative array of method callback definitions, as returned from
- *   hook_xmlrpc() implementations.
- *
- * @see hook_xmlrpc()
- * @see xmlrpc_server()
- */
-function hook_xmlrpc_alter(&$methods) {
-  // Directly change a simple method.
-  $methods['drupal.login'] = 'mymodule_login';
-
-  // Alter complex definitions.
-  foreach ($methods as $key => &$method) {
-    // Skip simple method definitions.
-    if (!is_int($key)) {
-      continue;
-    }
-    // Perform the wanted manipulation.
-    if ($method[0] == 'drupal.site.ping') {
-      $method[1] = 'mymodule_directory_ping';
-    }
-  }
-}
diff --git a/core/modules/xmlrpc/xmlrpc.inc b/core/modules/xmlrpc/xmlrpc.inc
deleted file mode 100644
index aaa94218698daf3c3650da005f2ae269479e7017..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/xmlrpc.inc
+++ /dev/null
@@ -1,628 +0,0 @@
-<?php
-
-/**
- * @file
- * Drupal XML-RPC library.
- *
- * Based on the IXR - The Incutio XML-RPC Library - (c) Incutio Ltd 2002-2005
- * Version 1.7 (beta) - Simon Willison, 23rd May 2005
- * Site:   http://scripts.incutio.com/xmlrpc/
- * Manual: http://scripts.incutio.com/xmlrpc/manual.php
- * This version is made available under the GNU GPL License
- */
-
-use Drupal\Component\Utility\String;
-use GuzzleHttp\Exception\RequestException;
-
-/**
- * Turns a data structure into objects with 'data' and 'type' attributes.
- *
- * @param $data
- *   The data structure.
- * @param $type
- *   Optional type to assign to $data.
- *
- * @return object
- *   An XML-RPC data object containing the input $data.
- */
-function xmlrpc_value($data, $type = FALSE) {
-  $xmlrpc_value = new stdClass();
-  $xmlrpc_value->data = $data;
-  if (!$type) {
-    $type = xmlrpc_value_calculate_type($xmlrpc_value);
-  }
-  $xmlrpc_value->type = $type;
-  if ($type == 'struct') {
-    // Turn all the values in the array into new xmlrpc_values
-    foreach ($xmlrpc_value->data as $key => $value) {
-      $xmlrpc_value->data[$key] = xmlrpc_value($value);
-    }
-  }
-  if ($type == 'array') {
-    for ($i = 0, $j = count($xmlrpc_value->data); $i < $j; $i++) {
-      $xmlrpc_value->data[$i] = xmlrpc_value($xmlrpc_value->data[$i]);
-    }
-  }
-  return $xmlrpc_value;
-}
-
-/**
- * Maps a PHP type to an XML-RPC type.
- *
- * @param $xmlrpc_value
- *   Variable whose type should be mapped.
- *
- * @return string
- *   The corresponding XML-RPC type.
- *
- * @see http://www.xmlrpc.com/spec#scalars
- */
-function xmlrpc_value_calculate_type($xmlrpc_value) {
-  // http://www.php.net/gettype: Never use gettype() to test for a certain type
-  // [...] Instead, use the is_* functions.
-  if (is_bool($xmlrpc_value->data)) {
-    return 'boolean';
-  }
-  if (is_double($xmlrpc_value->data)) {
-    return 'double';
-  }
-  if (is_int($xmlrpc_value->data)) {
-    return 'int';
-  }
-  if (is_array($xmlrpc_value->data)) {
-    // empty or integer-indexed arrays are 'array', string-indexed arrays 'struct'
-    return empty($xmlrpc_value->data) || range(0, count($xmlrpc_value->data) - 1) === array_keys($xmlrpc_value->data) ? 'array' : 'struct';
-  }
-  if (is_object($xmlrpc_value->data)) {
-    if (isset($xmlrpc_value->data->is_date)) {
-      return 'date';
-    }
-    if (isset($xmlrpc_value->data->is_base64)) {
-      return 'base64';
-    }
-    $xmlrpc_value->data = get_object_vars($xmlrpc_value->data);
-    return 'struct';
-  }
-  // default
-  return 'string';
-}
-
-/**
- * Generates XML representing the given value.
- *
- * @param $xmlrpc_value
- *   A value to be represented in XML.
- *
- * @return
- *   XML representation of $xmlrpc_value.
- */
-function xmlrpc_value_get_xml($xmlrpc_value) {
-  switch ($xmlrpc_value->type) {
-    case 'boolean':
-      return '<boolean>' . (($xmlrpc_value->data) ? '1' : '0') . '</boolean>';
-
-    case 'int':
-      return '<int>' . $xmlrpc_value->data . '</int>';
-
-    case 'double':
-      return '<double>' . $xmlrpc_value->data . '</double>';
-
-    case 'string':
-      // Note: we don't escape apostrophes because of the many blogging clients
-      // that don't support numerical entities (and XML in general) properly.
-      return '<string>' . htmlspecialchars($xmlrpc_value->data) . '</string>';
-
-    case 'array':
-      $return = '<array><data>' . "\n";
-      foreach ($xmlrpc_value->data as $item) {
-        $return .= '  <value>' . xmlrpc_value_get_xml($item) . "</value>\n";
-      }
-      $return .= '</data></array>';
-      return $return;
-
-    case 'struct':
-      $return = '<struct>' . "\n";
-      foreach ($xmlrpc_value->data as $name => $value) {
-        $return .= "  <member><name>" . String::checkPlain($name) . "</name><value>";
-        $return .= xmlrpc_value_get_xml($value) . "</value></member>\n";
-      }
-      $return .= '</struct>';
-      return $return;
-
-    case 'date':
-      return xmlrpc_date_get_xml($xmlrpc_value->data);
-
-    case 'base64':
-      return xmlrpc_base64_get_xml($xmlrpc_value->data);
-  }
-  return FALSE;
-}
-
-/**
- * Constructs an object representing an XML-RPC message.
- *
- * @param $message
- *   A string containing an XML message.
- *
- * @return object
- *   An XML-RPC object containing the message.
- *
- * @see http://www.xmlrpc.com/spec
- */
-function xmlrpc_message($message) {
-  $xmlrpc_message = new stdClass();
-  // The stack used to keep track of the current array/struct
-  $xmlrpc_message->array_structs = array();
-  // The stack used to keep track of if things are structs or array
-  $xmlrpc_message->array_structs_types = array();
-  // A stack as well
-  $xmlrpc_message->current_struct_name = array();
-  $xmlrpc_message->message = $message;
-  return $xmlrpc_message;
-}
-
-/**
- * Parses an XML-RPC message.
- *
- * If parsing fails, the faultCode and faultString will be added to the message
- * object.
- *
- * @param $xmlrpc_message
- *   An object generated by xmlrpc_message().
- *
- * @return
- *   TRUE if parsing succeeded; FALSE otherwise.
- */
-function xmlrpc_message_parse($xmlrpc_message) {
-  $xmlrpc_message->_parser = xml_parser_create();
-  // Set XML parser to take the case of tags into account.
-  xml_parser_set_option($xmlrpc_message->_parser, XML_OPTION_CASE_FOLDING, FALSE);
-  // Set XML parser callback functions
-  xml_set_element_handler($xmlrpc_message->_parser, 'xmlrpc_message_tag_open', 'xmlrpc_message_tag_close');
-  xml_set_character_data_handler($xmlrpc_message->_parser, 'xmlrpc_message_cdata');
-  xmlrpc_message_set($xmlrpc_message);
-  if (!xml_parse($xmlrpc_message->_parser, $xmlrpc_message->message)) {
-    return FALSE;
-  }
-  xml_parser_free($xmlrpc_message->_parser);
-
-  // Grab the error messages, if any.
-  $xmlrpc_message = xmlrpc_message_get();
-  if (!isset($xmlrpc_message->messagetype)) {
-    return FALSE;
-  }
-  elseif ($xmlrpc_message->messagetype == 'fault') {
-    $xmlrpc_message->fault_code = $xmlrpc_message->params[0]['faultCode'];
-    $xmlrpc_message->fault_string = $xmlrpc_message->params[0]['faultString'];
-  }
-  return TRUE;
-}
-
-/**
- * Stores a copy of the most recent XML-RPC message object temporarily.
- *
- * @param $value
- *   An XML-RPC message to store, or NULL to keep the last message.
- *
- * @return object
- *   The most recently stored message.
- *
- * @see xmlrpc_message_get()
- */
-function xmlrpc_message_set($value = NULL) {
-  static $xmlrpc_message;
-  if ($value) {
-    $xmlrpc_message = $value;
-  }
-  return $xmlrpc_message;
-}
-
-/**
- * Returns the most recently stored XML-RPC message object.
- *
- * @return object
- *   The most recently stored message.
- *
- * @see xmlrpc_message_set()
- */
-function xmlrpc_message_get() {
-  return xmlrpc_message_set();
-}
-
-/**
- * Handles opening tags for XML parsing in xmlrpc_message_parse().
- */
-function xmlrpc_message_tag_open($parser, $tag, $attr) {
-  $xmlrpc_message = xmlrpc_message_get();
-  $xmlrpc_message->current_tag_contents = '';
-  $xmlrpc_message->last_open = $tag;
-  switch ($tag) {
-    case 'methodCall':
-    case 'methodResponse':
-    case 'fault':
-      $xmlrpc_message->messagetype = $tag;
-      break;
-
-    // Deal with stacks of arrays and structs
-    case 'data':
-      $xmlrpc_message->array_structs_types[] = 'array';
-      $xmlrpc_message->array_structs[] = array();
-      break;
-
-    case 'struct':
-      $xmlrpc_message->array_structs_types[] = 'struct';
-      $xmlrpc_message->array_structs[] = array();
-      break;
-  }
-  xmlrpc_message_set($xmlrpc_message);
-}
-
-/**
- * Handles character data for XML parsing in xmlrpc_message_parse().
- */
-function xmlrpc_message_cdata($parser, $cdata) {
-  $xmlrpc_message = xmlrpc_message_get();
-  $xmlrpc_message->current_tag_contents .= $cdata;
-  xmlrpc_message_set($xmlrpc_message);
-}
-
-/**
- * Handles closing tags for XML parsing in xmlrpc_message_parse().
- */
-function xmlrpc_message_tag_close($parser, $tag) {
-  $xmlrpc_message = xmlrpc_message_get();
-  $value_flag = FALSE;
-  switch ($tag) {
-    case 'int':
-    case 'i4':
-      $value = (int)trim($xmlrpc_message->current_tag_contents);
-      $value_flag = TRUE;
-      break;
-
-    case 'double':
-      $value = (double)trim($xmlrpc_message->current_tag_contents);
-      $value_flag = TRUE;
-      break;
-
-    case 'string':
-      $value = $xmlrpc_message->current_tag_contents;
-      $value_flag = TRUE;
-      break;
-
-    case 'dateTime.iso8601':
-      $value = xmlrpc_date(trim($xmlrpc_message->current_tag_contents));
-      // $value = $iso->getTimestamp();
-      $value_flag = TRUE;
-      break;
-
-    case 'value':
-      // If no type is indicated, the type is string
-      // We take special care for empty values
-      if (trim($xmlrpc_message->current_tag_contents) != '' || (isset($xmlrpc_message->last_open) && ($xmlrpc_message->last_open == 'value'))) {
-        $value = (string) $xmlrpc_message->current_tag_contents;
-        $value_flag = TRUE;
-      }
-      unset($xmlrpc_message->last_open);
-      break;
-
-    case 'boolean':
-      $value = (boolean)trim($xmlrpc_message->current_tag_contents);
-      $value_flag = TRUE;
-      break;
-
-    case 'base64':
-      $value = base64_decode(trim($xmlrpc_message->current_tag_contents));
-      $value_flag = TRUE;
-      break;
-
-    // Deal with stacks of arrays and structs
-    case 'data':
-    case 'struct':
-      $value = array_pop($xmlrpc_message->array_structs);
-      array_pop($xmlrpc_message->array_structs_types);
-      $value_flag = TRUE;
-      break;
-
-    case 'member':
-      array_pop($xmlrpc_message->current_struct_name);
-      break;
-
-    case 'name':
-      $xmlrpc_message->current_struct_name[] = trim($xmlrpc_message->current_tag_contents);
-      break;
-
-    case 'methodName':
-      $xmlrpc_message->methodname = trim($xmlrpc_message->current_tag_contents);
-      break;
-  }
-  if ($value_flag) {
-    if (count($xmlrpc_message->array_structs) > 0) {
-      // Add value to struct or array
-      if ($xmlrpc_message->array_structs_types[count($xmlrpc_message->array_structs_types) - 1] == 'struct') {
-        // Add to struct
-        $xmlrpc_message->array_structs[count($xmlrpc_message->array_structs) - 1][$xmlrpc_message->current_struct_name[count($xmlrpc_message->current_struct_name) - 1]] = $value;
-      }
-      else {
-        // Add to array
-        $xmlrpc_message->array_structs[count($xmlrpc_message->array_structs) - 1][] = $value;
-      }
-    }
-    else {
-      // Just add as a parameter
-      $xmlrpc_message->params[] = $value;
-    }
-  }
-  if (!in_array($tag, array("data", "struct", "member"))) {
-    $xmlrpc_message->current_tag_contents = '';
-  }
-  xmlrpc_message_set($xmlrpc_message);
-}
-
-/**
- * Constructs an object representing an XML-RPC request.
- *
- * @param $method
- *   The name of the method to be called.
- * @param $args
- *   An array of parameters to send with the method.
- *
- * @return object
- *   An XML-RPC object representing the request.
- */
-function xmlrpc_request($method, $args) {
-  $xmlrpc_request = new stdClass();
-  $xmlrpc_request->method = $method;
-  $xmlrpc_request->args = $args;
-  $xmlrpc_request->xml = <<<EOD
-<?xml version="1.0"?>
-<methodCall>
-<methodName>{$xmlrpc_request->method}</methodName>
-<params>
-
-EOD;
-  foreach ($xmlrpc_request->args as $arg) {
-    $xmlrpc_request->xml .= '<param><value>';
-    $v = xmlrpc_value($arg);
-    $xmlrpc_request->xml .= xmlrpc_value_get_xml($v);
-    $xmlrpc_request->xml .= "</value></param>\n";
-  }
-  $xmlrpc_request->xml .= '</params></methodCall>';
-  return $xmlrpc_request;
-}
-
-/**
- * Generates, temporarily saves, and returns an XML-RPC error object.
- *
- * @param $code
- *   The error code.
- * @param $message
- *   The error message.
- * @param $reset
- *   TRUE to empty the temporary error storage. Ignored if $code is supplied.
- *
- * @return object
- *   An XML-RPC error object representing $code and $message, or the most
- *   recently stored error object if omitted.
- */
-function xmlrpc_error($code = NULL, $message = NULL, $reset = FALSE) {
-  static $xmlrpc_error;
-  if (isset($code)) {
-    $xmlrpc_error = new stdClass();
-    $xmlrpc_error->is_error = TRUE;
-    $xmlrpc_error->code = $code;
-    $xmlrpc_error->message = $message;
-  }
-  elseif ($reset) {
-    $xmlrpc_error = NULL;
-  }
-  return $xmlrpc_error;
-}
-
-/**
- * Converts an XML-RPC error object into XML.
- *
- * @param $xmlrpc_error
- *   The XML-RPC error object.
- *
- * @return string
- *   An XML representation of the error as an XML methodResponse.
- */
-function xmlrpc_error_get_xml($xmlrpc_error) {
-  return <<<EOD
-<methodResponse>
-  <fault>
-  <value>
-    <struct>
-    <member>
-      <name>faultCode</name>
-      <value><int>{$xmlrpc_error->code}</int></value>
-    </member>
-    <member>
-      <name>faultString</name>
-      <value><string>{$xmlrpc_error->message}</string></value>
-    </member>
-    </struct>
-  </value>
-  </fault>
-</methodResponse>
-
-EOD;
-}
-
-/**
- * Converts a PHP or ISO date/time to an XML-RPC object.
- *
- * @param $time
- *   A PHP timestamp or an ISO date-time string.
- *
- * @return object
- *   An XML-RPC time/date object.
- */
-function xmlrpc_date($time) {
-  $xmlrpc_date = new stdClass();
-  $xmlrpc_date->is_date = TRUE;
-  // $time can be a PHP timestamp or an ISO one
-  if (is_numeric($time)) {
-    $xmlrpc_date->year = gmdate('Y', $time);
-    $xmlrpc_date->month = gmdate('m', $time);
-    $xmlrpc_date->day = gmdate('d', $time);
-    $xmlrpc_date->hour = gmdate('H', $time);
-    $xmlrpc_date->minute = gmdate('i', $time);
-    $xmlrpc_date->second = gmdate('s', $time);
-    $xmlrpc_date->iso8601 = gmdate('Ymd\TH:i:s', $time);
-  }
-  else {
-    $xmlrpc_date->iso8601 = $time;
-    $time = str_replace(array('-', ':'), '', $time);
-    $xmlrpc_date->year = substr($time, 0, 4);
-    $xmlrpc_date->month = substr($time, 4, 2);
-    $xmlrpc_date->day = substr($time, 6, 2);
-    $xmlrpc_date->hour = substr($time, 9, 2);
-    $xmlrpc_date->minute = substr($time, 11, 2);
-    $xmlrpc_date->second = substr($time, 13, 2);
-  }
-  return $xmlrpc_date;
-}
-
-/**
- * Converts an XML-RPC date-time object into XML.
- *
- * @param $xmlrpc_date
- *   The XML-RPC date-time object.
- *
- * @return string
- *   An XML representation of the date/time as XML.
- */
-function xmlrpc_date_get_xml($xmlrpc_date) {
-  return '<dateTime.iso8601>' . $xmlrpc_date->year . $xmlrpc_date->month . $xmlrpc_date->day . 'T' . $xmlrpc_date->hour . ':' . $xmlrpc_date->minute . ':' . $xmlrpc_date->second . '</dateTime.iso8601>';
-}
-
-/**
- * Returns an XML-RPC base 64 object.
- *
- * @param $data
- *   Base 64 data to store in returned object.
- *
- * @return object
- *   An XML-RPC base 64 object.
- */
-function xmlrpc_base64($data) {
-  $xmlrpc_base64 = new stdClass();
-  $xmlrpc_base64->is_base64 = TRUE;
-  $xmlrpc_base64->data = $data;
-  return $xmlrpc_base64;
-}
-
-/**
- * Converts an XML-RPC base 64 object into XML.
- *
- * @param $xmlrpc_base64
- *   The XML-RPC base 64 object.
- *
- * @return string
- *   An XML representation of the base 64 data as XML.
- */
-function xmlrpc_base64_get_xml($xmlrpc_base64) {
-  return '<base64>' . base64_encode($xmlrpc_base64->data) . '</base64>';
-}
-
-/**
- * Performs one or more XML-RPC requests.
- *
- * @param string $url
- *   An absolute URL of the XML-RPC endpoint, e.g.,
- *   http://example.com/xmlrpc.php
- * @param array $args
- *   An associative array whose keys are the methods to call and whose values
- *   are the arguments to pass to the respective method. If multiple methods
- *   are specified, a system.multicall is performed.
- * @param array $headers
- *   (optional) An array of HTTP headers to pass along.
- *
- * @return
- *   A single response (single request) or an array of responses (multicall
- *   request). Each response is the return value of the method, just as if it
- *   has been a local function call, on success, or FALSE on failure. If FALSE
- *   is returned, see xmlrpc_errno() and xmlrpc_error_msg() to get more
- *   information.
- */
-function _xmlrpc($url, array $args, array $headers = array()) {
-  xmlrpc_clear_error();
-  if (count($args) > 1) {
-    $multicall_args = array();
-    foreach ($args as $method => $call) {
-      $multicall_args[] = array('methodName' => $method, 'params' => $call);
-    }
-    $method = 'system.multicall';
-    $args = array($multicall_args);
-  }
-  else {
-    $method = key($args);
-    $args = $args[$method];
-  }
-  $xmlrpc_request = xmlrpc_request($method, $args);
-
-  $headers['Content-Type'] = 'text/xml';
-
-  try {
-    $response = \Drupal::httpClient()->post($url, array('headers' => $headers, 'body' => $xmlrpc_request->xml));
-  }
-  catch (RequestException $exception) {
-    xmlrpc_error(NULL, $exception->getMethod());
-    return FALSE;
-  }
-  $message = xmlrpc_message($response->getBody(TRUE));
-  // Now parse what we've got back
-  if (!xmlrpc_message_parse($message)) {
-    // XML error
-    xmlrpc_error(-32700, t('Parse error. Not well formed'));
-    return FALSE;
-  }
-  // Is the message a fault?
-  if ($message->messagetype == 'fault') {
-    xmlrpc_error($message->fault_code, $message->fault_string);
-    return FALSE;
-  }
-  // We now know that the message is well-formed and a non-fault result.
-  if ($method == 'system.multicall') {
-    // Return per-method results or error objects.
-    $return = array();
-    foreach ($message->params[0] as $result) {
-      if (array_keys($result) == array(0)) {
-        $return[] = $result[0];
-      }
-      else {
-        $return[] = xmlrpc_error($result['faultCode'], $result['faultString']);
-      }
-    }
-  }
-  else {
-    $return = $message->params[0];
-  }
-  return $return;
-}
-
-/**
- * Returns the last XML-RPC client error number.
- */
-function xmlrpc_errno() {
-  $error = xmlrpc_error();
-  return ($error != NULL ? $error->code : NULL);
-}
-
-/**
- * Returns the last XML-RPC client error message.
- */
-function xmlrpc_error_msg() {
-  $error = xmlrpc_error();
-  return ($error != NULL ? $error->message : NULL);
-}
-
-/**
- * Clears any previously-saved errors.
- *
- * @see xmlrpc_error()
- */
-function xmlrpc_clear_error() {
-  xmlrpc_error(NULL, NULL, TRUE);
-}
diff --git a/core/modules/xmlrpc/xmlrpc.info.yml b/core/modules/xmlrpc/xmlrpc.info.yml
deleted file mode 100644
index e10ec9cc68a907dc589c152a1ce50b81feac4d68..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/xmlrpc.info.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-name: XML-RPC
-type: module
-description: 'Provides XML-RPC functionality.'
-package: Core
-version: VERSION
-core: 8.x
diff --git a/core/modules/xmlrpc/xmlrpc.module b/core/modules/xmlrpc/xmlrpc.module
deleted file mode 100644
index 21fafe1e7fd3ee33007f15912d5b82f8be9453a8..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/xmlrpc.module
+++ /dev/null
@@ -1,56 +0,0 @@
-<?php
-
-/**
- * @file
- * Enables XML-RPC functionality.
- */
-
-use Drupal\Core\Routing\RouteMatchInterface;
-
-/**
- * Implements hook_help().
- */
-function xmlrpc_help($route_name, RouteMatchInterface $route_match) {
-  switch ($route_name) {
-    case 'help.page.xmlrpc':
-      $output = '';
-      $output .= '<h3>' . t('About') . '</h3>';
-      $output .= '<p>' . t('The XML-RPC module gives external systems the opportunity to communicate with the site through the <a href="http://en.wikipedia.org/wiki/XML-RPC">XML-RPC protocol</a>. An XML-RPC client can communicate with the site by making a request to <a href="!xrphp">xmlrpc.php</a>. For more information, see <a href="!xrdocs">the online documentation for the XML-RPC module</a>.', array('!xrphp' => \Drupal::url('xmlrpc.php'),'!xrdocs' => 'https://drupal.org/documentation/modules/xmlrpc')) . '</p>';
-      return $output;
-  }
-}
-
-/**
- * Performs one or more XML-RPC request(s).
- *
- * Usage example:
- * @code
- * $result = xmlrpc('http://example.com/xmlrpc.php', array(
- *   'service.methodName' => array($parameter, $second, $third),
- * ));
- * @endcode
- *
- * @param string $url
- *   An absolute URL of the XML-RPC endpoint.
- * @param array $args
- *   An associative array whose keys are the methods to call and whose values
- *   are the arguments to pass to the respective method. If multiple methods
- *   are specified, a system.multicall is performed.
- * @param array $headers
- *   (optional) An array of headers to pass along.
- *
- * @return
- *   For one request:
- *     Either the return value of the method on success, or FALSE.
- *     If FALSE is returned, see xmlrpc_errno() and xmlrpc_error_msg().
- *   For multiple requests:
- *     An array of results. Each result will either be the result
- *     returned by the method called, or an xmlrpc_error object if the call
- *     failed. See xmlrpc_error().
- *
- * @ingroup third_party
- */
-function xmlrpc($url, array $args, array $headers = array()) {
-  module_load_include('inc', 'xmlrpc');
-  return _xmlrpc($url, $args, $headers);
-}
diff --git a/core/modules/xmlrpc/xmlrpc.routing.yml b/core/modules/xmlrpc/xmlrpc.routing.yml
deleted file mode 100644
index f6cc78c604af88d9a78659e2d9d9ef21f1d81a85..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/xmlrpc.routing.yml
+++ /dev/null
@@ -1,7 +0,0 @@
-xmlrpc.php:
-  path: '/xmlrpc.php'
-  defaults:
-    _title: 'XML-RPC'
-    _content: '\Drupal\xmlrpc\Controller\XmlrpcController::php'
-  requirements:
-    _access: 'TRUE'
diff --git a/core/modules/xmlrpc/xmlrpc.server.inc b/core/modules/xmlrpc/xmlrpc.server.inc
deleted file mode 100644
index 0fb497d63fdbc801f248b8decd25d9fb149037d0..0000000000000000000000000000000000000000
--- a/core/modules/xmlrpc/xmlrpc.server.inc
+++ /dev/null
@@ -1,413 +0,0 @@
-<?php
-
-/**
- * @file
- * Page callback file for the xmlrpc module.
- */
-
-use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\HttpKernel\Exception\BadRequestHttpException;
-
-/**
- * Process an XML-RPC request.
- *
- * @return \Symfony\Component\HttpFoundation\Response
- *   A Response object.
- *
- * @deprecated in Drupal 8.x-dev, will be removed before Drupal 8.0.
- *   Use \Drupal\xmlrpc\Controller\XmlrpcController::php().
- */
-function xmlrpc_server_page() {
-  module_load_include('inc', 'xmlrpc');
-  return xmlrpc_server(\Drupal::moduleHandler()->invokeAll('xmlrpc'));
-}
-
-/**
- * Invokes XML-RPC methods on this server.
- *
- * @param array $callbacks
- *   Either an associative array of external XML-RPC method names as keys with
- *   the callbacks they map to as values, or a more complex structure
- *   describing XML-RPC callbacks as returned from hook_xmlrpc().
- *
- * @return \Symfony\Component\HttpFoundation\Response
- *   A Response object.
- */
-function xmlrpc_server($callbacks) {
-  $xmlrpc_server = new stdClass();
-  // Define built-in XML-RPC method names
-  $defaults = array(
-    'system.multicall' => 'xmlrpc_server_multicall',
-    array(
-      'system.methodSignature',
-      'xmlrpc_server_method_signature',
-      array('array', 'string'),
-      'Returns an array describing the return type and required parameters of a method.',
-    ),
-    array(
-      'system.getCapabilities',
-      'xmlrpc_server_get_capabilities',
-      array('struct'),
-      'Returns a struct describing the XML-RPC specifications supported by this server.',
-    ),
-    array(
-      'system.listMethods',
-      'xmlrpc_server_list_methods',
-      array('array'),
-      'Returns an array of available methods on this server.',
-    ),
-    array(
-      'system.methodHelp',
-      'xmlrpc_server_method_help',
-      array('string', 'string'),
-      'Returns a documentation string for the specified method.',
-    ),
-  );
-  // We build an array of all method names by combining the built-ins
-  // with those defined by modules implementing the _xmlrpc hook.
-  // Built-in methods are overridable.
-  $callbacks = array_merge($defaults, (array) $callbacks);
-  \Drupal::moduleHandler()->alter('xmlrpc', $callbacks);
-  foreach ($callbacks as $key => $callback) {
-    // we could check for is_array($callback)
-    if (is_int($key)) {
-      $method = $callback[0];
-      $xmlrpc_server->callbacks[$method] = $callback[1];
-      $xmlrpc_server->signatures[$method] = $callback[2];
-      $xmlrpc_server->help[$method] = $callback[3];
-    }
-    else {
-      $xmlrpc_server->callbacks[$key] = $callback;
-      $xmlrpc_server->signatures[$key] = '';
-      $xmlrpc_server->help[$key] = '';
-    }
-  }
-
-  $data = file_get_contents('php://input');
-  if (!$data) {
-    throw new BadRequestHttpException('XML-RPC server accepts POST requests only.');
-  }
-  $xmlrpc_server->message = xmlrpc_message($data);
-  if (!xmlrpc_message_parse($xmlrpc_server->message)) {
-    return xmlrpc_server_error(-32700, t('Parse error. Request not well formed.'));
-  }
-  if ($xmlrpc_server->message->messagetype != 'methodCall') {
-    return xmlrpc_server_error(-32600, t('Server error. Invalid XML-RPC. Request must be a methodCall.'));
-  }
-  if (!isset($xmlrpc_server->message->params)) {
-    $xmlrpc_server->message->params = array();
-  }
-  xmlrpc_server_set($xmlrpc_server);
-  $result = xmlrpc_server_call($xmlrpc_server, $xmlrpc_server->message->methodname, $xmlrpc_server->message->params);
-
-  if (is_object($result) && !empty($result->is_error)) {
-    return xmlrpc_server_error($result);
-  }
-  // Encode the result
-  $r = xmlrpc_value($result);
-  // Create the XML
-  $xml = '
-<methodResponse>
-  <params>
-  <param>
-    <value>' . xmlrpc_value_get_xml($r) . '</value>
-  </param>
-  </params>
-</methodResponse>
-
-';
-  // Send it
-  return xmlrpc_server_output($xml);
-}
-
-/**
- * Throws an XML-RPC error.
- *
- * @param $error
- *   An error object or integer error code.
- * @param $message
- *   (optional) The description of the error. Used only if an integer error
- *   code was passed in.
- *
- * @return \Symfony\Component\HttpFoundation\Response
- *   A Response object.
- */
-function xmlrpc_server_error($error, $message = FALSE) {
-  if ($message && !is_object($error)) {
-    $error = xmlrpc_error($error, $message);
-  }
-  return xmlrpc_server_output(xmlrpc_error_get_xml($error));
-}
-
-/**
- * Sends XML-RPC output to the browser.
- *
- * @param string $xml
- *   XML to send to the browser.
- *
- * @return \Symfony\Component\HttpFoundation\Response
- *   A Response object.
- */
-function xmlrpc_server_output($xml) {
-  $xml = '<?xml version="1.0"?>' . "\n" . $xml;
-  $headers = array(
-    'Content-Length' => strlen($xml),
-    'Content-Type' => 'text/xml'
-  );
-  return new Response($xml, 200, $headers);
-}
-
-/**
- * Stores a copy of an XML-RPC request temporarily.
- *
- * @param object $xmlrpc_server
- *   (optional) Request object created by xmlrpc_server(). Omit to leave the
- *   previous server object saved.
- *
- * @return
- *   The latest stored request.
- *
- * @see xmlrpc_server_get()
- */
-function xmlrpc_server_set($xmlrpc_server = NULL) {
-  static $server;
-  if (!isset($server)) {
-    $server = $xmlrpc_server;
-  }
-  return $server;
-}
-
-/**
- * Retrieves the latest stored XML-RPC request.
- *
- * @return object
- *   The stored request.
- *
- * @see xmlrpc_server_set()
- */
-function xmlrpc_server_get() {
-  return xmlrpc_server_set();
-}
-
-/**
- * Dispatches an XML-RPC request and any parameters to the appropriate handler.
- *
- * @param object $xmlrpc_server
- *   Object containing information about this XML-RPC server, the methods it
- *   provides, their signatures, etc.
- * @param string $methodname
- *   The external XML-RPC method name; e.g., 'system.methodHelp'.
- * @param array $args
- *   Array containing any parameters that are to be sent along with the request.
- *
- * @return
- *   The results of the call.
- */
-function xmlrpc_server_call($xmlrpc_server, $methodname, $args) {
-  // Make sure parameters are in an array
-  if ($args && !is_array($args)) {
-    $args = array($args);
-  }
-  // Has this method been mapped to a Drupal function by us or by modules?
-  if (!isset($xmlrpc_server->callbacks[$methodname])) {
-    return xmlrpc_error(-32601, t('Server error. Requested method @methodname not specified.', array("@methodname" => $xmlrpc_server->message->methodname)));
-  }
-  $method = $xmlrpc_server->callbacks[$methodname];
-  $signature = $xmlrpc_server->signatures[$methodname];
-
-  // If the method has a signature, validate the request against the signature
-  if (is_array($signature)) {
-    $ok = TRUE;
-    // Remove first element of $signature which is the unused 'return type'.
-    array_shift($signature);
-    // Check the number of arguments
-    if (count($args) != count($signature)) {
-      return xmlrpc_error(-32602, t('Server error. Wrong number of method parameters.'));
-    }
-    // Check the argument types
-    foreach ($signature as $key => $type) {
-      $arg = $args[$key];
-      switch ($type) {
-        case 'int':
-        case 'i4':
-          if (is_array($arg) || !is_int($arg)) {
-            $ok = FALSE;
-          }
-          break;
-
-        case 'base64':
-        case 'string':
-          if (!is_string($arg)) {
-            $ok = FALSE;
-          }
-          break;
-
-        case 'boolean':
-          if ($arg !== FALSE && $arg !== TRUE) {
-            $ok = FALSE;
-          }
-          break;
-
-        case 'float':
-        case 'double':
-          if (!is_float($arg)) {
-            $ok = FALSE;
-          }
-          break;
-
-        case 'date':
-        case 'dateTime.iso8601':
-          if (!$arg->is_date) {
-            $ok = FALSE;
-          }
-          break;
-      }
-      if (!$ok) {
-        return xmlrpc_error(-32602, t('Server error. Invalid method parameters.'));
-      }
-    }
-  }
-
-  if (!function_exists($method)) {
-    return xmlrpc_error(-32601, t('Server error. Requested function @method does not exist.', array("@method" => $method)));
-  }
-  // Call the mapped function
-  return call_user_func_array($method, $args);
-}
-
-/**
- * Dispatches multiple XML-RPC requests.
- *
- * @param array $methodcalls
- *   An array of XML-RPC requests to make. Each request is an array with the
- *   following elements:
- *   - methodName: Name of the method to invoke.
- *   - params: Parameters to pass to the method.
- *
- * @return
- *   An array of the results of each request.
- *
- * @see xmlrpc_server_call()
- */
-function xmlrpc_server_multicall($methodcalls) {
-  // See http://www.xmlrpc.com/discuss/msgReader$1208
-  $return = array();
-  $xmlrpc_server = xmlrpc_server_get();
-  foreach ($methodcalls as $call) {
-    $ok = TRUE;
-    if (!isset($call['methodName']) || !isset($call['params'])) {
-      $result = xmlrpc_error(3, t('Invalid syntax for system.multicall.'));
-      $ok = FALSE;
-    }
-    $method = $call['methodName'];
-    $params = $call['params'];
-    if ($method == 'system.multicall') {
-      $result = xmlrpc_error(-32600, t('Recursive calls to system.multicall are forbidden.'));
-    }
-    elseif ($ok) {
-      $result = xmlrpc_server_call($xmlrpc_server, $method, $params);
-    }
-    if (is_object($result) && !empty($result->is_error)) {
-      $return[] = array(
-        'faultCode' => $result->code,
-        'faultString' => $result->message,
-      );
-    }
-    else {
-      $return[] = array($result);
-    }
-  }
-  return $return;
-}
-
-/**
- * Lists the methods available on this XML-RPC server.
- *
- * XML-RPC method system.listMethods maps to this function.
- *
- * @return array
- *   Array of the names of methods available on this server.
- */
-function xmlrpc_server_list_methods() {
-  $xmlrpc_server = xmlrpc_server_get();
-  return array_keys($xmlrpc_server->callbacks);
-}
-
-/**
- * Returns a list of the capabilities of this server.
- *
- * XML-RPC method system.getCapabilities maps to this function.
- *
- * @return array
- *   Array of server capabilities.
- *
- * @see http://groups.yahoo.com/group/xml-rpc/message/2897
- */
-function xmlrpc_server_get_capabilities() {
-  return array(
-    'xmlrpc' => array(
-      'specUrl' => 'http://www.xmlrpc.com/spec',
-      'specVersion' => 1,
-    ),
-    'faults_interop' => array(
-      'specUrl' => 'http://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.php',
-      'specVersion' => 20010516,
-    ),
-    'system.multicall' => array(
-      'specUrl' => 'http://www.xmlrpc.com/discuss/msgReader$1208',
-      'specVersion' => 1,
-    ),
-    'introspection' => array(
-      'specUrl' => 'http://scripts.incutio.com/xmlrpc/introspection.html',
-      'specVersion' => 1,
-    ),
-  );
-}
-
-/**
- * Returns one method signature for a function.
- *
- * This is the function mapped to the XML-RPC method system.methodSignature.
- *
- * A method signature is an array of the input and output types of a method. For
- * instance, the method signature of this function is array('array', 'string'),
- * because it takes an array and returns a string.
- *
- * @param string $methodname
- *   Name of method to return a method signature for.
- *
- * @return array
- *   An array of arrays of types, each of the arrays representing one method
- *   signature of the function that $methodname maps to.
- */
-function xmlrpc_server_method_signature($methodname) {
-  $xmlrpc_server = xmlrpc_server_get();
-  if (!isset($xmlrpc_server->callbacks[$methodname])) {
-    return xmlrpc_error(-32601, t('Server error. Requested method @methodname not specified.', array("@methodname" => $methodname)));
-  }
-  if (!is_array($xmlrpc_server->signatures[$methodname])) {
-    return xmlrpc_error(-32601, t('Server error. Requested method @methodname signature not specified.', array("@methodname" => $methodname)));
-  }
-  // We array of types
-  $return = array();
-  foreach ($xmlrpc_server->signatures[$methodname] as $type) {
-    $return[] = $type;
-  }
-  return array($return);
-}
-
-/**
- * Returns the help for an XML-RPC method.
- *
- * XML-RPC method system.methodHelp maps to this function.
- *
- * @param string $method
- *   Name of method for which we return a help string.
- *
- * @return string
- *   Help text for $method.
- */
-function xmlrpc_server_method_help($method) {
-  $xmlrpc_server = xmlrpc_server_get();
-  return $xmlrpc_server->help[$method];
-}
diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh
index 54bef824f9957f84bb3d438c362a3147398d882a..16b29ca1dbd3ee1d65f93a660404f7a802dafa44 100755
--- a/core/scripts/run-tests.sh
+++ b/core/scripts/run-tests.sh
@@ -190,7 +190,7 @@ function simpletest_script_help() {
               as the names of test groups as shown at
               admin/config/development/testing.
               These group names typically correspond to module names like "User"
-              or "Profile" or "System", but there is also a group "XML-RPC".
+              or "Profile" or "System", but there is also a group "Database".
               If --class is specified then these are interpreted as the names of
               specific test classes whose test methods will be run. Tests must
               be separated by commas. Ignored if --all is specified.