src/main/java/org/wymiwyg/commons/util/URI.java
private void initializePath(String p_uriSpec)
		throws MalformedURIException {
		if (p_uriSpec == null) {
			throw new MalformedURIException("Cannot initialize path from null string!");
		}

		int index = 0;
		int start = 0;
		int end = p_uriSpec.length();
		char testChar = '\0';

		// path - everything up to query string or fragment
		while (index < end) {
			testChar = p_uriSpec.charAt(index);
			if (testChar == '?' || testChar == '#') {
				break;
			}
			// check for valid escape sequence
			if (testChar == '%') {
				if (index + 2 >= end
					|| !isHex(p_uriSpec.charAt(index + 1))
					|| !isHex(p_uriSpec.charAt(index + 2))) {
					throw new MalformedURIException("Path contains invalid escape sequence!");
				}
			} else if (
				!isReservedCharacter(testChar)
					&& !isUnreservedCharacter(testChar)) {
				throw new MalformedURIException(
					"Path contains invalid character: " + testChar);
			}
			index++;
		}
		m_path = p_uriSpec.substring(start, index);

		// query - starts with ? and up to fragment or end
		if (testChar == '?') {
			index++;
			start = index;
			while (index < end) {
				testChar = p_uriSpec.charAt(index);
				if (testChar == '#') {
					break;
				}
				if (testChar == '%') {
					if (index + 2 >= end
						|| !isHex(p_uriSpec.charAt(index + 1))
						|| !isHex(p_uriSpec.charAt(index + 2))) {
						throw new MalformedURIException("Query string contains invalid escape sequence!");
					}
				} else if (
					!isReservedCharacter(testChar)
						&& !isUnreservedCharacter(testChar)) {
					throw new MalformedURIException(
						"Query string contains invalid character:" + testChar);
				}
				index++;
			}
			m_queryString = p_uriSpec.substring(start, index);
		}

		// fragment - starts with #
		if (testChar == '#') {
			index++;
			start = index;
			while (index < end) {
				testChar = p_uriSpec.charAt(index);

				if (testChar == '%') {
					if (index + 2 >= end
						|| !isHex(p_uriSpec.charAt(index + 1))
						|| !isHex(p_uriSpec.charAt(index + 2))) {
						throw new MalformedURIException("Fragment contains invalid escape sequence!");
					}
				} else if (
					!isReservedCharacter(testChar)
						&& !isUnreservedCharacter(testChar)) {
					throw new MalformedURIException(
						"Fragment contains invalid character:" + testChar);
				}
				index++;
			}
			m_fragment = p_uriSpec.substring(start, index);
		}
	}
private void initializePath(String p_uriSpec)
		throws MalformedURIException {
		if (p_uriSpec == null) {
			throw new MalformedURIException("Cannot initialize path from null string!");
		}

		int index = 0;
		int start = 0;
		int end = p_uriSpec.length();
		char testChar = '\0';

		// path - everything up to query string or fragment
		while (index < end) {
			testChar = p_uriSpec.charAt(index);
			if (testChar == '?' || testChar == '#') {
				break;
			}
			// check for valid escape sequence
			if (testChar == '%') {
				if (index + 2 >= end
					|| !isHex(p_uriSpec.charAt(index + 1))
					|| !isHex(p_uriSpec.charAt(index + 2))) {
					throw new MalformedURIException("Path contains invalid escape sequence!");
				}
			} else if (
				!isReservedCharacter(testChar)
					&& !isUnreservedCharacter(testChar)) {
				throw new MalformedURIException(
					"Path contains invalid character: " + testChar);
			}
			index++;
		}
		m_path = p_uriSpec.substring(start, index);

		// query - starts with ? and up to fragment or end
		if (testChar == '?') {
			index++;
			start = index;
			while (index < end) {
				testChar = p_uriSpec.charAt(index);
				if (testChar == '#') {
					break;
				}
				if (testChar == '%') {
					if (index + 2 >= end
						|| !isHex(p_uriSpec.charAt(index + 1))
						|| !isHex(p_uriSpec.charAt(index + 2))) {
						throw new MalformedURIException("Query string contains invalid escape sequence!");
					}
				} else if (
					!isReservedCharacter(testChar)
						&& !isUnreservedCharacter(testChar)) {
					throw new MalformedURIException(
						"Query string contains invalid character:" + testChar);
				}
				index++;
			}
			m_queryString = p_uriSpec.substring(start, index);
		}

		// fragment - starts with #
		if (testChar == '#') {
			index++;
			start = index;
			while (index < end) {
				testChar = p_uriSpec.charAt(index);

				if (testChar == '%') {
					if (index + 2 >= end
						|| !isHex(p_uriSpec.charAt(index + 1))
						|| !isHex(p_uriSpec.charAt(index + 2))) {
						throw new MalformedURIException("Fragment contains invalid escape sequence!");
					}
				} else if (
					!isReservedCharacter(testChar)
						&& !isUnreservedCharacter(testChar)) {
					throw new MalformedURIException(
						"Fragment contains invalid character:" + testChar);
				}
				index++;
			}
			m_fragment = p_uriSpec.substring(start, index);
		}
	}
Initialize the path for this URI from a URI string spec.

@param p_uriSpec the URI specification (cannot be null)

@exception MalformedURIException if p_uriSpec violates syntax rules