/** Test scheme getting/setting. */
 public void testScheme() throws Exception {
   final Reference ref = getDefaultReference();
   assertEquals(DEFAULT_SCHEME, ref.getScheme());
   final String scheme = "https";
   ref.setScheme(scheme);
   assertEquals(scheme, ref.getScheme());
   ref.setScheme(DEFAULT_SCHEME);
   assertEquals(DEFAULT_SCHEME, ref.getScheme());
 }
  /**
   * Redirects a given call to a target reference. In the default implementation, the request HTTP
   * headers, stored in the request's attributes, are removed before dispatching. After dispatching,
   * the response HTTP headers are also removed to prevent conflicts with the main call.
   *
   * @param targetRef The target reference with URI variables resolved.
   * @param request The request to handle.
   * @param response The response to update.
   */
  protected void outboundServerRedirect(Reference targetRef, Request request, Response response) {
    Restlet next = (getApplication() == null) ? null : getApplication().getOutboundRoot();

    if (next == null) {
      next = getContext().getClientDispatcher();
    }

    serverRedirect(next, targetRef, request, response);
    if (response.getEntity() != null
        && !request.getResourceRef().getScheme().equalsIgnoreCase(targetRef.getScheme())) {
      // Distinct protocol, this data cannot be exposed.
      response.getEntity().setLocationRef((Reference) null);
    }
  }
 /**
  * Tests the parsing of a reference into its components
  *
  * @param reference
  * @param scheme
  * @param authority
  * @param path
  * @param query
  * @param fragment
  */
 private void testRef0(
     String reference,
     String scheme,
     String authority,
     String path,
     String query,
     String fragment) {
   final Reference ref = new Reference(reference);
   assertEquals(scheme, ref.getScheme());
   assertEquals(authority, ref.getAuthority());
   assertEquals(path, ref.getPath());
   assertEquals(query, ref.getQuery());
   assertEquals(fragment, ref.getFragment());
 }
 /**
  * Test the behaviour of several getters upon a Reference object.
  *
  * @param reference
  * @param query
  * @param fragment
  * @param toString
  */
 private void testRef4(
     Reference reference,
     String scheme,
     String authority,
     String path,
     String remainingPart,
     String toString,
     String targetRef,
     String query,
     String relativePart) {
   assertEquals(reference.getScheme(), scheme);
   assertEquals(reference.getAuthority(), authority);
   assertEquals(reference.getPath(), path);
   assertEquals(reference.getRemainingPart(), remainingPart);
   assertEquals(reference.toString(), toString);
   assertEquals(reference.getTargetRef().toString(), targetRef);
   assertEquals(reference.getQuery(), query);
   assertEquals(reference.getRelativePart(), relativePart);
 }