public void pushMatchedURI(String encoded) { int start = (encoded.startsWith("/")) ? 1 : 0; int end = (encoded.endsWith("/")) ? encoded.length() - 1 : encoded.length(); encoded = start < end ? encoded.substring(start, end) : ""; String decoded = Encode.decode(encoded); if (encodedMatchedUris == null) encodedMatchedUris = new LinkedList<String>(); encodedMatchedUris.add(0, encoded); if (matchedUris == null) matchedUris = new LinkedList<String>(); matchedUris.add(0, decoded); }
protected static String encodeFromArray(String segment, String[] encodingMap, boolean encodePercent) { StringBuilder result = new StringBuilder(); for (int i = 0; i < segment.length(); i++) { char currentChar = segment.charAt(i); if (!encodePercent && currentChar == '%') { result.append(currentChar); continue; } String encoding = encode(currentChar, encodingMap); if (encoding == null) { result.append(currentChar); } else { result.append(encoding); } } return result.toString(); }
@Override public UriBuilder fragment(String fragment) throws IllegalArgumentException { if (fragment == null) { this.fragment = null; return this; } this.fragment = Encode.encodeFragment(fragment); return this; }
/** * Keep any valid encodings from string i.e. keep "%2D" but don't keep "%p" * * @param segment value to encode * @return encoded value */ public static String encodePathSaveEncodings(String segment) { String result = encodeFromArray(segment, pathEncoding, false); result = encodeNonCodes(result); return result; }
/** * Keep encoded values "%..." and template parameters intact i.e. "{x}" * * @param segment value to encode * @param encoding encoding * @return encoded value */ public static String encodeValue(String segment, String[] encoding) { ArrayList<String> params = new ArrayList<String>(); boolean foundParam = false; StringBuilder newSegment = new StringBuilder(); if (savePathParams(segment, newSegment, params)) { foundParam = true; segment = newSegment.toString(); } String result = encodeFromArray(segment, encoding, false); result = encodeNonCodes(result); segment = result; if (foundParam) { segment = pathParamReplacement(segment, params); } return segment; }
protected StringBuilder replacePathParameter(String name, String value, boolean isEncoded, String string, StringBuilder builder, boolean encodeSlash) { if (string.indexOf('{') == -1) { return builder.append(string); } Matcher matcher = createUriParamMatcher(string); int start = 0; while (matcher.find()) { String param = matcher.group(1); if (!param.equals(name)) continue; builder.append(string, start, matcher.start()); if (!isEncoded) { if (encodeSlash) value = Encode.encodePath(value); else value = Encode.encodePathSegment(value); } else { value = Encode.encodeNonCodes(value); } builder.append(value); start = matcher.end(); } builder.append(string, start, string.length()); return builder; }
if (encodeSlash) stringValue = Encode.encodePathSegmentAsIs(stringValue); else stringValue = Encode.encodePathAsIs(stringValue); if (encodeSlash) stringValue = Encode.encodePathSegmentSaveEncodings(stringValue); else stringValue = Encode.encodePathSaveEncodings(stringValue);
@Override public UriBuilder replacePath(String path) { if (path == null) { this.path = null; return this; } this.path = Encode.encodePath(path); return this; }
private static String extractURI(URL url) { StringBuffer buffer = new StringBuffer(url.getProtocol()).append("://"); if (url.getHost() != null) buffer.append(url.getHost()); if (url.getPort() != -1 && url.getPort() != 80) buffer.append(":").append(Integer.toString(url.getPort())); if (url.getPath() != null) buffer.append(Encode.encodePath(url.getPath())); if (url.getQuery() != null) buffer.append("?").append(url.getQuery()); if (url.getRef() != null) buffer.append("#").append(Encode.encodeFragment(url.getRef())); String buf = buffer.toString(); return buf; }
/** * Encodes everything of a query parameter name or value. * * @param nameOrValue value to encode * @return encoded value */ public static String encodeQueryParamAsIs(String nameOrValue) { return encodeFromArray(nameOrValue, queryNameValueEncoding, true); }
public void addEncodedPathParameter(String name, String value) { getEncodedPathParameters().add(name, value); String value1 = Encode.decodePath(value); getPathParameters().add(name, value1); }
for (String value : values) value = Encode.encodePathAsIs(value); builder.substitutePathParam(entry.getKey(), value, true);
@Override public UriBuilder matrixParam(String name, Object... values) throws IllegalArgumentException { if (name == null) throw new IllegalArgumentException(Messages.MESSAGES.nameParameterNull()); if (values == null) throw new IllegalArgumentException(Messages.MESSAGES.valuesParameterNull()); if (path == null) path = ""; for (Object val : values) { if (val == null) throw new IllegalArgumentException(Messages.MESSAGES.nullValue()); path += ";" + Encode.encodeMatrixParam(name) + "=" + Encode.encodeMatrixParam(val.toString()); } return this; }
public static String decodePath(String path) { Matcher matcher = encodedCharsMulti.matcher(path); int start=0; StringBuilder builder = new StringBuilder(); CharsetDecoder decoder = Charset.forName(UTF_8).newDecoder(); while (matcher.find()) { builder.append(path, start, matcher.start()); decoder.reset(); String decoded = decodeBytes(matcher.group(1), decoder); builder.append(decoded); start = matcher.end(); } builder.append(path, start, path.length()); return builder.toString(); }
if (encodeSlash) stringValue = Encode.encodePathSegmentAsIs(stringValue); else stringValue = Encode.encodePathAsIs(stringValue); if (encodeSlash) stringValue = Encode.encodePathSegmentSaveEncodings(stringValue); else stringValue = Encode.encodePathSaveEncodings(stringValue);
/** * Keep encoded values "%..." and template parameters intact i.e. "{x}" * * @param segment * @param encoding * @return */ public static String encodeValue(String segment, String[] encoding) { ArrayList<String> params = new ArrayList<String>(); boolean foundParam = false; StringBuilder newSegment = new StringBuilder(); if (savePathParams(segment, newSegment, params)) { foundParam = true; segment = newSegment.toString(); } String result = encodeFromArray(segment, encoding, false); result = encodeNonCodes(result); segment = result; if (foundParam) { segment = pathParamReplacement(segment, params); } return segment; }
protected StringBuilder replacePathParameter(String name, String value, boolean isEncoded, String string, StringBuilder builder, boolean encodeSlash) { if (string.indexOf('{') == -1) { return builder.append(string); } Matcher matcher = createUriParamMatcher(string); int start = 0; while (matcher.find()) { String param = matcher.group(1); if (!param.equals(name)) continue; builder.append(string, start, matcher.start()); if (!isEncoded) { if (encodeSlash) value = Encode.encodePath(value); else value = Encode.encodePathSegment(value); } else { value = Encode.encodeNonCodes(value); } builder.append(value); start = matcher.end(); } builder.append(string, start, string.length()); return builder; }
/** * Keep any valid encodings from string i.e. keep "%2D" but don't keep "%p" * * @param segment value to encode * @return encoded value */ public static String encodePathSegmentSaveEncodings(String segment) { String result = encodeFromArray(segment, pathSegmentEncoding, false); result = encodeNonCodes(result); return result; }
@Override public UriBuilder replaceMatrix(String matrix) throws IllegalArgumentException { if (matrix == null) matrix = ""; if (!matrix.startsWith(";")) matrix = ";" + matrix; matrix = Encode.encodePath(matrix); if (path == null) { path = matrix; } else { int start = path.lastIndexOf('/'); if (start < 0) start = 0; int matrixIndex = path.indexOf(';', start); if (matrixIndex > -1) path = path.substring(0, matrixIndex) + matrix; else path += matrix; } return this; }
public static String encodeFragmentAsIs(String nameOrValue) { return encodeFromArray(nameOrValue, queryNameValueEncoding, true); }