@Override
  public SymbolTable getRequestSymbolTable(URI requestUri)
  {
    // If the URI prefix doesn't match, return null.
    if (!requestUri.toString().startsWith(_uriPrefix))
    {
      return null;
    }
    String serviceName = LoadBalancerUtil.getServiceNameFromUri(requestUri);

    // First check the cache.
    SymbolTable symbolTable = _serviceNameToSymbolTableCache.getIfPresent(serviceName);
    if (symbolTable != null)
    {
      // If we got a 404, we will cache an empty symbol table. For such cases, just return null, so that no
      // symbol table is used.
      return symbolTable == EmptySymbolTable.SHARED ? null : symbolTable;
    }

    try
    {
      URI symbolTableUri = new URI(_uriPrefix + serviceName + "/" + RestLiSymbolTableRequestHandler.SYMBOL_TABLE_URI_PATH);

      //
      // Fetch remote symbol table, configuring the fetch to return an empty table on 404. This will ensure that
      // for services that don't have symbol tables enabled yet, we will not use any symbol tables when encoding.
      //
      symbolTable = fetchRemoteSymbolTable(symbolTableUri, Collections.emptyMap(), true);

      if (symbolTable != null)
      {
        // Cache the retrieved table.
        _serviceNameToSymbolTableCache.put(serviceName, symbolTable);

        // If this symbol table is not the shared empty table, also cache it by symbol table name, else return null
        // to not use any symbol tables when encoding.
        if (symbolTable != EmptySymbolTable.SHARED)
        {
          _symbolTableNameToSymbolTableCache.put(
              _symbolTableNameHandler.extractMetadata(symbolTable.getName()).getSymbolTableName(), symbolTable);
        }
        else
        {
          return null;
        }
      }

      return symbolTable;
    }
    catch (URISyntaxException ex)
    {
      LOGGER.error("Failed to construct symbol table URI from request URI " + requestUri, ex);
    }

    return null;
  }
@Test
  public void testGetRemoteRequestSymbolTableDifferentUriPrefix()
  {
    Assert.assertNull(_provider.getRequestSymbolTable(URI.create("http://blah:100/bleh")));
  }