/*
 * Copyright (c) 2010, 2019 Oracle and/or its affiliates. All rights reserved.
 *
 * This program and the accompanying materials are made available under the
 * terms of the Eclipse Public License v. 2.0, which is available at
 * http://www.eclipse.org/legal/epl-2.0.
 *
 * This Source Code may also be made available under the following Secondary
 * Licenses when the conditions for such availability set forth in the
 * Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
 * version 2 with the GNU Classpath Exception, which is available at
 * https://www.gnu.org/software/classpath/license.html.
 *
 * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
 */

package org.glassfish.jersey.server.internal;

Utility methods used by container implementations.
Author:Adam Lindenthal
/** * Utility methods used by container implementations. * * @author Adam Lindenthal */
public class ContainerUtils { private static final String[] TOKENS = { "{", "}", "\\", "^", "|", "`" }; private static final String[] REPLACEMENTS = { "%7B", "%7D", "%5C", "%5E", "%7C", "%60" };
Encodes (predefined subset of) unsafe/unwise URI characters with the percent-encoding.

Replaces the predefined set of unsafe URI characters in the query string with its percent-encoded counterparts. The reserved characters (as defined by the RFC) are automatically encoded by browsers, but some characters are in the "gray zone" - are not explicitly forbidden, but not recommended and known to cause issues.

Params:
  • originalQueryString – URI query string (the part behind the question mark character).
Returns:the same string with unsafe characters percent encoded.
/** * Encodes (predefined subset of) unsafe/unwise URI characters with the percent-encoding. * * <p>Replaces the predefined set of unsafe URI characters in the query string with its percent-encoded * counterparts. The reserved characters (as defined by the RFC) are automatically encoded by browsers, but some * characters are in the "gray zone" - are not explicitly forbidden, but not recommended and known to cause * issues.</p> * * @param originalQueryString URI query string (the part behind the question mark character). * @return the same string with unsafe characters percent encoded. */
public static String encodeUnsafeCharacters(final String originalQueryString) { if (originalQueryString == null) { return null; } String result = originalQueryString; for (int i = 0; i < TOKENS.length; i++) { if (originalQueryString.contains(TOKENS[i])) { result = result.replace(TOKENS[i], REPLACEMENTS[i]); } } return result; }
Reduces the number of slashes before the path to only one slash.
Params:
  • path – path string
Returns:path string with reduced slashes to only one.
/** * Reduces the number of slashes before the path to only one slash. * * @param path path string * @return path string with reduced slashes to only one. */
public static String reduceLeadingSlashes(final String path) { int length; if (path == null || (length = path.length()) == 0) { return path; } int start = 0; while (start != length && "/".indexOf(path.charAt(start)) != -1) { start++; } return path.substring(start > 0 ? start - 1 : 0); }
Splits URI address from query params and returns it.
Params:
  • uri – URI address in string format with query params
Returns:URI address in string format without query params
/** * Splits URI address from query params and returns it. * * @param uri URI address in string format with query params * @return URI address in string format without query params */
public static String getHandlerPath(String uri) { if (uri == null || uri.length() == 0 || !uri.contains("?")) { return uri; } else { return uri.substring(0, uri.indexOf("?")); } } }