⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uri.java

📁 一个java方面的消息订阅发送的源码
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/*

 * The Apache Software License, Version 1.1

 *

 *

 * Copyright (c) 1999 The Apache Software Foundation.  All rights

 * reserved.

 *

 * Redistribution and use in source and binary forms, with or without

 * modification, are permitted provided that the following conditions

 * are met:

 *

 * 1. Redistributions of source code must retain the above copyright

 *    notice, this list of conditions and the following disclaimer.

 *

 * 2. Redistributions in binary form must reproduce the above copyright

 *    notice, this list of conditions and the following disclaimer in

 *    the documentation and/or other materials provided with the

 *    distribution.

 *

 * 3. The end-user documentation included with the redistribution,

 *    if any, must include the following acknowledgment:

 *       "This product includes software developed by the

 *        Apache Software Foundation (http://www.apache.org/)."

 *    Alternately, this acknowledgment may appear in the software itself,

 *    if and wherever such third-party acknowledgments normally appear.

 *

 * 4. The names "Xalan" and "Apache Software Foundation" must

 *    not be used to endorse or promote products derived from this

 *    software without prior written permission. For written

 *    permission, please contact apache@apache.org.

 *

 * 5. Products derived from this software may not be called "Apache",

 *    nor may "Apache" appear in their name, without prior written

 *    permission of the Apache Software Foundation.

 *

 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED

 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES

 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE

 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR

 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,

 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT

 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF

 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND

 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,

 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT

 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF

 * SUCH DAMAGE.

 * ====================================================================

 *

 * This software consists of voluntary contributions made by many

 * individuals on behalf of the Apache Software Foundation and was

 * originally based on software copyright (c) 1999, Lotus

 * Development Corporation., http://www.lotus.com.  For more

 * information on the Apache Software Foundation, please see

 * <http://www.apache.org/>.

 */





package org.exolab.jms.net.uri;



import java.io.IOException;

import java.io.Serializable;





/**

 * A class to represent a Uniform Resource Identifier (URI). This class

 * is designed to handle the parsing of URIs and provide access to

 * the various components (scheme, host, port, userinfo, path, query

 * string and fragment) that may constitute a URI.

 * <p>

 * Parsing of a URI specification is done according to the URI

 * syntax described in RFC 2396

 * <http://www.ietf.org/rfc/rfc2396.txt?number=2396>. Every URI consists

 * of a scheme, followed by a colon (':'), followed by a scheme-specific

 * part. For URIs that follow the "generic URI" syntax, the scheme-

 * specific part begins with two slashes ("//") and may be followed

 * by an authority segment (comprised of user information, host, and

 * port), path segment, query segment and fragment. Note that RFC 2396

 * no longer specifies the use of the parameters segment and excludes

 * the "user:password" syntax as part of the authority segment. If

 * "user:password" appears in a URI, the entire user/password string

 * is stored as userinfo.

 * <p>

 * For URIs that do not follow the "generic URI" syntax (e.g. mailto),

 * the entire scheme-specific part is treated as the "path" portion

 * of the URI.

 * <p>

 * Note that, unlike the java.net.URL class, this class does not provide

 * any built-in network access functionality nor does it provide any

 * scheme-specific functionality (for example, it does not know a

 * default port for a specific scheme). Rather, it only knows the

 * grammar and basic set of operations that can be applied to a URI.

 *

 * @version  $Id: URI.java,v 1.1 2004/11/26 01:51:06 tanderson Exp $

 *

 */

public final class URI

{





  /**

   * MalformedURIExceptions are thrown in the process of building a URI

   * or setting fields on a URI when an operation would result in an

   * invalid URI specification.

   */

  public static class MalformedURIException

      extends IOException

  {





      /**

       * Constructs a <code>MalformedURIException</code> with no specified

       * detail message.

       */

      public MalformedURIException()

      {

          super();

      }





      /**

       * Constructs a <code>MalformedURIException</code> with the

       * specified detail message.

       *

       * @param message the detail message.

       */

      public MalformedURIException( String message )

      {

          super( message );

      }





  }





    /**

     * reserved characters

     */

    private static final String RESERVED_CHARACTERS = ";/?:@&=+$,";





    /**

     * URI punctuation mark characters - these, combined with

     * alphanumerics, constitute the "unreserved" characters

     */

    private static final String MARK_CHARACTERS = "-_.!~*'() ";





    /**

     * scheme can be composed of alphanumerics and these characters

     */

    private static final String SCHEME_CHARACTERS = "+-.";





    /**

     * userinfo can be composed of unreserved, escaped and these

     * characters

     */

    private static final String USERINFO_CHARACTERS = ";:&=+$,";





    /**

     * Stores the scheme (usually the protocol) for this URI.

     */

    private String _scheme = null;





    /**

     * If specified, stores the userinfo for this URI; otherwise null

     */

    private String _userinfo = null;





    /**

     * If specified, stores the host for this URI; otherwise null

     */

    private String _host = null;





    /**

     * If specified, stores the port for this URI; otherwise -1

     */

    private int _port = -1;





    /**

     * If specified, stores the path for this URI; otherwise null

     */

    private String _path = null;





    /**

     * If specified, stores the query string for this URI; otherwise

     * null.

     */

    private String _queryString = null;





    /**

     * If specified, stores the fragment for this URI; otherwise null

     */

    private String _fragment = null;





    /**

     * Indicate whether in DEBUG mode

     */

    private static boolean DEBUG = false;





    /**

     * Construct a new and uninitialized URI.

     */

    public URI()

    {

    }





    /**

     * Construct a new URI from another URI. All fields for this URI are

     * set equal to the fields of the URI passed in.

     *

     * @param other the URI to copy (cannot be null)

     */

    public URI( URI other)

    {

        initialize( other );

    }





    /**

     * Construct a new URI from a URI specification string. If the

     * specification follows the "generic URI" syntax, (two slashes

     * following the first colon), the specification will be parsed

     * accordingly - setting the scheme, userinfo, host,port, path, query

     * string and fragment fields as necessary. If the specification does

     * not follow the "generic URI" syntax, the specification is parsed

     * into a scheme and scheme-specific part (stored as the path) only.

     *

     * @param uriSpec the URI specification string (cannot be null or empty)

     * @throws MalformedURIException uriSpec violates any syntax rules

     */

    public URI( String uriSpec )

        throws MalformedURIException

    {

        this( (URI) null, uriSpec);

    }





    /**

     * Construct a new URI from a base URI and a URI specification string.

     * The URI specification string may be a relative URI.

     *

     * @param base the base URI (cannot be null if uriSpec is null or empty)

     * @param uriSpec the URI specification string (cannot be null or empty

     * if base is null)

     * @throws MalformedURIException uriSpec violates any syntax rules

     */

    public URI( URI base, String uriSpec)

        throws MalformedURIException

    {

        initialize( base, uriSpec );

    }





    /**

     * Construct a new URI that does not follow the generic URI syntax.

     * Only the scheme and scheme-specific part (stored as the path) are

     * initialized.

     *

     * @param scheme the URI scheme (cannot be null or empty)

     * @param schemeSpecificPart the scheme-specific part (cannot be

     * null or empty)

     * @throws MalformedURIException scheme violates any syntax rules

     */

    public URI( String scheme, String schemeSpecificPart )

        throws MalformedURIException

    {

        if ( scheme == null || scheme.trim().length() == 0 )

            throw new MalformedURIException( "Argument scheme is null or an empty string" );

        if ( schemeSpecificPart == null || schemeSpecificPart.trim().length() == 0 )

            throw new MalformedURIException( "Argument schemeSpecificPart is null or an empty string" );

        setScheme( scheme );

        setPath( schemeSpecificPart );

    }





    /**

     * Construct a new URI that follows the generic URI syntax from its

     * component parts. Each component is validated for syntax and some

     * basic semantic checks are performed as well.  See the individual

     * setter methods for specifics.

     *

     * @param scheme the URI scheme (cannot be null or empty)

     * @param host the hostname or IPv4 address for the URI

     * @param path the URI path - if the path contains '?' or '#',

     * then the query string and/or fragment will be set from the path;

     * however, if the query and fragment are specified both in the path

     * and as separate parameters, an exception is thrown

     * @param queryString the URI query string (cannot be specified

     * if path is null)

     * @param fragment the URI fragment (cannot be specified if path is null)

     * @throws MalformedURIException Any of the parameters violates

     * syntax rules or semantic rules

     */

    public URI( String scheme, String host, String path,

                String queryString, String fragment )

        throws MalformedURIException

    {

        this( scheme, null, host, -1, path, queryString, fragment );

    }





    /**

     * Construct a new URI that follows the generic URI syntax from its

     * component parts. Each component is validated for syntax and some

     * basic semantic checks are performed as well.  See the individual

     * setter methods for specifics.

     *

     * @param scheme the URI scheme (cannot be null or empty)

     * @param userinfo the URI userinfo (cannot be specified if host is null)

     * @param host the hostname or IPv4 address for the URI

     * @param port the URI port (may be -1 for "unspecified"; cannot

     * be specified if host is null)

     * @param path the URI path - if the path contains '?' or '#',

     * then the query string and/or fragment will be set from the path;

     * however, if the query and fragment are specified both in the path

     * and as separate parameters, an exception is thrown

     * @param queryString the URI query string (cannot be specified

     * if path is null)

     * @param fragment the URI fragment (cannot be specified if path is null)

     * @throws MalformedURIException Any of the parameters violates

     *  syntax rules or semantic rules

     */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -