View Javadoc

    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>&lt;username&gt;:&lt;password&gt;</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>&lt;username&gt;:&lt;password&gt;</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>&lt;username&gt;:&lt;password&gt;</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>&lt;username&gt;:&lt;password&gt;</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