HttpsURL.java
1 /* 2 * $Header: /home/jerenkrantz/tmp/commons/commons-convert/cvs/home/cvs/jakarta-commons//httpclient/src/java/org/apache/commons/httpclient/HttpsURL.java,v 1.11 2004/09/30 17:26:41 oglueck Exp $ 3 * $Revision: 480424 $ 4 * $Date: 2006-11-29 06:56:49 +0100 (Wed, 29 Nov 2006) $ 5 * 6 * ==================================================================== 7 * 8 * Licensed to the Apache Software Foundation (ASF) under one or more 9 * contributor license agreements. See the NOTICE file distributed with 10 * this work for additional information regarding copyright ownership. 11 * The ASF licenses this file to You under the Apache License, Version 2.0 12 * (the "License"); you may not use this file except in compliance with 13 * the License. You may obtain a copy of the License at 14 * 15 * http://www.apache.org/licenses/LICENSE-2.0 16 * 17 * Unless required by applicable law or agreed to in writing, software 18 * distributed under the License is distributed on an "AS IS" BASIS, 19 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 20 * See the License for the specific language governing permissions and 21 * limitations under the License. 22 * ==================================================================== 23 * 24 * This software consists of voluntary contributions made by many 25 * individuals on behalf of the Apache Software Foundation. For more 26 * information on the Apache Software Foundation, please see 27 * <http://www.apache.org/>. 28 * 29 */ 30 31 package org.apache.commons.httpclient; 32 33 import org.apache.commons.httpclient.util.URIUtil; 34 35 /** 36 * The HTTPS URL. 37 * 38 * @author <a href="mailto:jericho at apache.org">Sung-Gu</a> 39 * @author <a href="mailto:mbowler@GargoyleSoftware.com">Mike Bowler</a> 40 */ 41 public class HttpsURL extends HttpURL { 42 43 // ----------------------------------------------------------- Constructors 44 45 /** 46 * Create an instance as an internal use. 47 */ 48 protected HttpsURL() { 49 } 50 51 52 /** 53 * Construct a HTTPS URL as an escaped form of a character array with the 54 * given charset to do escape encoding. 55 * 56 * @param escaped the HTTPS URL character sequence 57 * @param charset the charset to do escape encoding 58 * @throws URIException If {@link #checkValid()} fails 59 * @throws NullPointerException if <code>escaped</code> is <code>null</code> 60 * @see #getProtocolCharset 61 */ 62 public HttpsURL(char[] escaped, String charset) 63 throws URIException, NullPointerException { 64 protocolCharset = charset; 65 parseUriReference(new String(escaped), true); 66 checkValid(); 67 } 68 69 70 /** 71 * Construct a HTTPS URL as an escaped form of a character array. 72 * 73 * @param escaped the HTTPS URL character sequence 74 * @throws URIException If {@link #checkValid()} fails 75 * @throws NullPointerException if <code>escaped</code> is <code>null</code> 76 * @see #getDefaultProtocolCharset 77 */ 78 public HttpsURL(char[] escaped) throws URIException, NullPointerException { 79 parseUriReference(new String(escaped), true); 80 checkValid(); 81 } 82 83 84 /** 85 * Construct a HTTPS URL from a given string with the given charset to do 86 * escape encoding. 87 * 88 * @param original the HTTPS URL string 89 * @param charset the charset to do escape encoding 90 * @throws URIException If {@link #checkValid()} fails 91 * @see #getProtocolCharset 92 */ 93 public HttpsURL(String original, String charset) throws URIException { 94 protocolCharset = charset; 95 parseUriReference(original, false); 96 checkValid(); 97 } 98 99 100 /** 101 * Construct a HTTPS URL from a given string. 102 * 103 * @param original the HTTPS URL string 104 * @throws URIException If {@link #checkValid()} fails 105 * @see #getDefaultProtocolCharset 106 */ 107 public HttpsURL(String original) throws URIException { 108 parseUriReference(original, false); 109 checkValid(); 110 } 111 112 113 /** 114 * Construct a HTTPS URL from given components. 115 * 116 * @param host the host string 117 * @param port the port number 118 * @param path the path string 119 * @throws URIException If {@link #checkValid()} fails 120 * @see #getDefaultProtocolCharset 121 */ 122 public HttpsURL(String host, int port, String path) throws URIException { 123 this(null, host, port, path, null, null); 124 } 125 126 127 /** 128 * Construct a HTTPS URL from given components. 129 * 130 * @param host the host string 131 * @param port the port number 132 * @param path the path string 133 * @param query the query string 134 * @throws URIException If {@link #checkValid()} fails 135 * @see #getDefaultProtocolCharset 136 */ 137 public HttpsURL(String host, int port, String path, String query) 138 throws URIException { 139 140 this(null, host, port, path, query, null); 141 } 142 143 144 /** 145 * Construct a HTTPS URL from given components. 146 * 147 * @param user the user name 148 * @param password his or her password 149 * @param host the host string 150 * @throws URIException If {@link #checkValid()} fails 151 * @see #getDefaultProtocolCharset 152 */ 153 public HttpsURL(String user, String password, String host) 154 throws URIException { 155 156 this(user, password, host, -1, null, null, null); 157 } 158 159 160 /** 161 * Construct a HTTPS URL from given components. 162 * 163 * @param user the user name 164 * @param password his or her password 165 * @param host the host string 166 * @param port the port number 167 * @throws URIException If {@link #checkValid()} fails 168 * @see #getDefaultProtocolCharset 169 */ 170 public HttpsURL(String user, String password, String host, int port) 171 throws URIException { 172 173 this(user, password, host, port, null, null, null); 174 } 175 176 177 /** 178 * Construct a HTTPS URL from given components. 179 * 180 * @param user the user name 181 * @param password his or her password 182 * @param host the host string 183 * @param port the port number 184 * @param path the path string 185 * @throws URIException If {@link #checkValid()} fails 186 * @see #getDefaultProtocolCharset 187 */ 188 public HttpsURL(String user, String password, String host, int port, 189 String path) throws URIException { 190 191 this(user, password, host, port, path, null, null); 192 } 193 194 195 /** 196 * Construct a HTTPS URL from given components. 197 * 198 * @param user the user name 199 * @param password his or her password 200 * @param host the host string 201 * @param port the port number 202 * @param path the path string 203 * @param query The query string. 204 * @throws URIException If {@link #checkValid()} fails 205 * @see #getDefaultProtocolCharset 206 */ 207 public HttpsURL(String user, String password, String host, int port, 208 String path, String query) throws URIException { 209 210 this(user, password, host, port, path, query, null); 211 } 212 213 214 /** 215 * Construct a HTTPS URL from given components. 216 * 217 * @param host the host string 218 * @param path the path string 219 * @param query the query string 220 * @param fragment the fragment string 221 * @throws URIException If {@link #checkValid()} fails 222 * @see #getDefaultProtocolCharset 223 */ 224 public HttpsURL(String host, String path, String query, String fragment) 225 throws URIException { 226 227 this(null, host, -1, path, query, fragment); 228 } 229 230 231 /** 232 * Construct a HTTPS URL from given components. 233 * 234 * Note: The <code>userinfo</code> format is normally 235 * <code><username>:<password></code> where 236 * username and password must both be URL escaped. 237 * 238 * @param userinfo the userinfo string whose parts are URL escaped 239 * @param host the host string 240 * @param path the path string 241 * @param query the query string 242 * @param fragment the fragment string 243 * @throws URIException If {@link #checkValid()} fails 244 * @see #getDefaultProtocolCharset 245 */ 246 public HttpsURL(String userinfo, String host, String path, String query, 247 String fragment) throws URIException { 248 249 this(userinfo, host, -1, path, query, fragment); 250 } 251 252 253 /** 254 * Construct a HTTPS URL from given components. 255 * 256 * Note: The <code>userinfo</code> format is normally 257 * <code><username>:<password></code> where 258 * username and password must both be URL escaped. 259 * 260 * @param userinfo the userinfo string whose parts are URL escaped 261 * @param host the host string 262 * @param port the port number 263 * @param path the path string 264 * @throws URIException If {@link #checkValid()} fails 265 * @see #getDefaultProtocolCharset 266 */ 267 public HttpsURL(String userinfo, String host, int port, String path) 268 throws URIException { 269 270 this(userinfo, host, port, path, null, null); 271 } 272 273 274 /** 275 * Construct a HTTPS URL from given components. 276 * 277 * Note: The <code>userinfo</code> format is normally 278 * <code><username>:<password></code> where 279 * username and password must both be URL escaped. 280 * 281 * @param userinfo the userinfo string whose parts are URL escaped 282 * @param host the host string 283 * @param port the port number 284 * @param path the path string 285 * @param query the query string 286 * @throws URIException If {@link #checkValid()} fails 287 * @see #getDefaultProtocolCharset 288 */ 289 public HttpsURL(String userinfo, String host, int port, String path, 290 String query) throws URIException { 291 292 this(userinfo, host, port, path, query, null); 293 } 294 295 296 /** 297 * Construct a HTTPS URL from given components. 298 * 299 * Note: The <code>userinfo</code> format is normally 300 * <code><username>:<password></code> where 301 * username and password must both be URL escaped. 302 * 303 * @param userinfo the userinfo string whose parts are URL escaped 304 * @param host the host string 305 * @param port the port number 306 * @param path the path string 307 * @param query the query string 308 * @param fragment the fragment string 309 * @throws URIException If {@link #checkValid()} fails 310 * @see #getDefaultProtocolCharset 311 */ 312 public HttpsURL(String userinfo, String host, int port, String path, 313 String query, String fragment) throws URIException { 314 315 // validate and contruct the URI character sequence 316 StringBuffer buff = new StringBuffer(); 317 if (userinfo != null || host != null || port != -1) { 318 _scheme = DEFAULT_SCHEME; // in order to verify the own protocol 319 buff.append(_default_scheme); 320 buff.append("://"); 321 if (userinfo != null) { 322 buff.append(userinfo); 323 buff.append('@'); 324 } 325 if (host != null) { 326 buff.append(URIUtil.encode(host, URI.allowed_host)); 327 if (port != -1 || port != DEFAULT_PORT) { 328 buff.append(':'); 329 buff.append(port); 330 } 331 } 332 } 333 if (path != null) { // accept empty path 334 if (scheme != null && !path.startsWith("/")) { 335 throw new URIException(URIException.PARSING, 336 "abs_path requested"); 337 } 338 buff.append(URIUtil.encode(path, URI.allowed_abs_path)); 339 } 340 if (query != null) { 341 buff.append('?'); 342 buff.append(URIUtil.encode(query, URI.allowed_query)); 343 } 344 if (fragment != null) { 345 buff.append('#'); 346 buff.append(URIUtil.encode(fragment, URI.allowed_fragment)); 347 } 348 parseUriReference(buff.toString(), true); 349 checkValid(); 350 } 351 352 /** 353 * Construct a HTTP URL from given components. 354 * 355 * @param user the user name 356 * @param password his or her password 357 * @param host the host string 358 * @param port the port number 359 * @param path the path string 360 * @param query the query string 361 * @param fragment the fragment string 362 * @throws URIException If {@link #checkValid()} fails 363 * @see #getDefaultProtocolCharset 364 */ 365 public HttpsURL(String user, String password, String host, int port, 366 String path, String query, String fragment) throws URIException { 367 this(HttpURL.toUserinfo(user, password), host, port, path, query, fragment); 368 } 369 370 /** 371 * Construct a HTTPS URL with a given relative HTTPS URL string. 372 * 373 * @param base the base HttpsURL 374 * @param relative the relative HTTPS URL string 375 * @throws URIException If {@link #checkValid()} fails 376 */ 377 public HttpsURL(HttpsURL base, String relative) throws URIException { 378 this(base, new HttpsURL(relative)); 379 } 380 381 382 /** 383 * Construct a HTTPS URL with a given relative URL. 384 * 385 * @param base the base HttpsURL 386 * @param relative the relative HttpsURL 387 * @throws URIException If {@link #checkValid()} fails 388 */ 389 public HttpsURL(HttpsURL base, HttpsURL relative) throws URIException { 390 super(base, relative); 391 checkValid(); 392 } 393 394 // -------------------------------------------------------------- Constants 395 396 /** 397 * Default scheme for HTTPS URL. 398 */ 399 public static final char[] DEFAULT_SCHEME = { 'h', 't', 't', 'p', 's' }; 400 401 /** 402 * Default scheme for HTTPS URL. 403 * @deprecated Use {@link #DEFAULT_SCHEME} instead. This one doesn't 404 * conform to the project naming conventions. 405 */ 406 public static final char[] _default_scheme = DEFAULT_SCHEME; 407 408 409 /** 410 * Default port for HTTPS URL. 411 */ 412 public static final int DEFAULT_PORT = 443; 413 414 /** 415 * Default port for HTTPS URL. 416 * @deprecated Use {@link #DEFAULT_PORT} instead. This one doesn't conform 417 * to the project naming conventions. 418 */ 419 public static final int _default_port = DEFAULT_PORT; 420 421 422 /** 423 * The serialVersionUID. 424 */ 425 static final long serialVersionUID = 887844277028676648L; 426 427 // ------------------------------------------------------------- The scheme 428 429 /** 430 * Get the scheme. You can get the scheme explicitly. 431 * 432 * @return the scheme 433 */ 434 public char[] getRawScheme() { 435 return (_scheme == null) ? null : HttpsURL.DEFAULT_SCHEME; 436 } 437 438 439 /** 440 * Get the scheme. You can get the scheme explicitly. 441 * 442 * @return the scheme null if empty or undefined 443 */ 444 public String getScheme() { 445 return (_scheme == null) ? null : new String(HttpsURL.DEFAULT_SCHEME); 446 } 447 448 // --------------------------------------------------------------- The port 449 450 /** 451 * Get the port number. 452 * @return the port number 453 */ 454 public int getPort() { 455 return (_port == -1) ? HttpsURL.DEFAULT_PORT : _port; 456 } 457 458 // ---------------------------------------------------------------- Utility 459 460 /** 461 * Verify the valid class use for construction. 462 * 463 * @throws URIException the wrong scheme use 464 */ 465 protected void checkValid() throws URIException { 466 // could be explicit protocol or undefined. 467 if (!(equals(_scheme, DEFAULT_SCHEME) || _scheme == null)) { 468 throw new URIException(URIException.PARSING, "wrong class use"); 469 } 470 } 471 472 } 473