private String assembleURL(
		String host,
		int port,
		String userInfo,
		String authority,
		String protocol,
		List path_list,
		List query_list,
		String fragment
	) {
		StringBuffer buf = new StringBuffer();
		
		if (this.is_absolute_path) {
			// Protocol
			if (protocol != null && protocol.length() > 0) {
				buf.append(protocol);
				buf.append(PROTOCOL_DELIM);
			}
			
			// Authority
			authority = assembleAuthority(host, port, userInfo, authority);
			if (authority != null && authority.length() > 0) {
				buf.append(AUTHORITY_DELIM);
				buf.append(authority);
			}
		}
		
		// Path
		String path = assemblePath(path_list);
		if (path != null) {
			buf.append(path);
		}
		
		// Query
		String query = assembleQuery(query_list);
		if (query != null) {
			buf.append(QUERY_DELIM);
			buf.append(query);
		}
		
		// Fragment
		if (fragment != null) {
			buf.append(FRAGMENT_DELIM);
			buf.append(fragment);
		}
		
		return buf.toString();
	}