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

📄 uri.java

📁 OpenJMS是一个开源的Java Message Service API 1.0.2 规范的实现,它包含有以下特性: *. 它既支持点到点(point-to-point)(PTP)模型和发布/订
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
    public URI( String scheme, String userinfo, String host, int port,                String path, String queryString, String fragment )        throws MalformedURIException    {        if ( scheme == null || scheme.trim().length() == 0 )            throw new MalformedURIException( "Argument scheme is null or an empty string" );        if ( host == null ) {            if ( userinfo != null )                throw new MalformedURIException( "Argument userInfo must be null if host is null" );            if ( port != -1 )                throw new MalformedURIException( "Argument port must be null if host is null" );        } else if ( host.trim().length() == 0 )            throw new IllegalArgumentException( "Argument host is an empty string" );        if ( path != null ) {            if ( path.indexOf('?') != -1 && queryString != null )                throw new MalformedURIException( "Argument queryString is illegal if path includes query string" );            if ( path.indexOf('#') != -1 && fragment != null )                throw new MalformedURIException( "Argument fragment is illegal if path includes fragment identifier" );        } else if ( path.trim().length() == 0 )            throw new IllegalArgumentException( "Argument path is an empty string" );        setScheme( scheme );        setHost( host );        setPort( port );        setUserinfo( userinfo );        setPath( path );        setQueryString( queryString );        setFragment( fragment );    }    /**     * Initialize all fields of this URI from another URI.     *     * @param other the URI to copy (cannot be null)     */    private void initialize( URI other )    {        _scheme = other.getScheme();        _userinfo = other.getUserinfo();        _host = other.getHost();        _port = other.getPort();        _path = other.getPath();        _queryString = other.getQueryString();        _fragment = other.getFragment();    }    /**     * Initializes this URI from a base URI and a URI specification string.     * See RFC 2396 Section 4 and Appendix B for specifications on parsing     * the URI and Section 5 for specifications on resolving relative URIs     * and relative paths.     *     * @param base the base URI (may be null if uriSpec is an absolute URI)     * @param uriSpec the URI spec string which may be an absolute or     * relative URI (can only be null/empty if base is not null)     * @throws MalformedURIException base is null and uriSpec is not an     * absolute URI or uriSpec violates syntax rules     */    private void initialize( URI base, String uriSpec )        throws MalformedURIException    {        int    uriSpecLen;        int    index;        int    startPos;        char   testChar;        if ( base == null && ( uriSpec == null || uriSpec.trim().length() == 0) )            throw new MalformedURIException( "Argument base is null and argument uriSpec is null or an empty string" );        // just make a copy of the base if spec is empty        if ( uriSpec == null || uriSpec.trim().length() == 0 ) {            initialize( base );            return;        }        uriSpec = uriSpec.trim();        uriSpecLen = uriSpec.length();        index = 0;        // check for scheme        if ( uriSpec.indexOf( ':' ) == -1 ) {            if ( base == null )                throw new MalformedURIException( "No scheme found in URI." );        } else {            initializeScheme( uriSpec );            index = _scheme.length() + 1;        }        // two slashes means generic URI syntax, so we get the authority        if ( ( index + 1 < uriSpecLen ) && ( uriSpec.substring( index ).startsWith( "//" ) ) ) {            index += 2;            startPos = index;            // get authority - everything up to path, query or fragment            testChar = '\0';            while ( index < uriSpecLen ) {                testChar = uriSpec.charAt( index );                if ( testChar == '/' || testChar == '?' || testChar == '#' )                    break;                index++;            }            // if we found authority, parse it out, otherwise we set the            // host to empty string            if ( index > startPos )                initializeAuthority( uriSpec.substring( startPos, index ) );            else                _host = "";        }        initializePath( uriSpec.substring( index ) );        // Resolve relative URI to base URI - see RFC 2396 Section 5.2        // In some cases, it might make more sense to throw an exception        // (when scheme is specified is the string spec and the base URI        // is also specified, for example), but we're just following the        // RFC specifications        if ( base != null ) {            // check to see if this is the current doc - RFC 2396 5.2 #2            // note that this is slightly different from the RFC spec in that            // we don't include the check for query string being null            // - this handles cases where the urispec is just a query            // string or a fragment (e.g. "?y" or "#s") -            // see <http://www.ics.uci.edu/~fielding/url/test1.html> which            // identified this as a bug in the RFC            if ( _path.length() == 0 && _scheme == null && _host == null ) {                _scheme = base.getScheme();                _userinfo = base.getUserinfo();                _host = base.getHost();                _port = base.getPort();                _path = base.getPath();                if ( _queryString == null )                    _queryString = base.getQueryString();                return;            }            // check for scheme - RFC 2396 5.2 #3            // if we found a scheme, it means absolute URI, so we're done            if ( _scheme == null )                _scheme = base.getScheme();            else                return;            // check for authority - RFC 2396 5.2 #4            // if we found a host, then we've got a network path, so we're done            if ( _host == null ) {                _userinfo = base.getUserinfo();                _host = base.getHost();                _port = base.getPort();            } else                return;            // check for absolute path - RFC 2396 5.2 #5            if ( _path.length() > 0 && _path.startsWith( "/" ) )                return;            // if we get to this point, we need to resolve relative path            // RFC 2396 5.2 #6            String tmpPath = new String();            String basePath = base.getPath();            // 6a - get all but the last segment of the base URI path            if ( basePath != null ) {                int lastSlash = basePath.lastIndexOf( '/' );                if ( lastSlash != -1 )                    tmpPath = basePath.substring( 0, lastSlash + 1 );            }            // 6b - append the relative URI path            tmpPath = tmpPath.concat( tmpPath );            // 6c - remove all "./" where "." is a complete path segment            index = -1;            while ( ( index = tmpPath.indexOf( "/./" ) ) != -1 )                tmpPath = tmpPath.substring( 0, index + 1 ).concat( tmpPath.substring( index + 3 ) );            // 6d - remove "." if path ends with "." as a complete path segment            if ( tmpPath.endsWith("/.") )                tmpPath = tmpPath.substring( 0, tmpPath.length() - 1 );            // 6e - remove all "<segment>/../" where "<segment>" is a complete            // path segment not equal to ".."            index = -1;            int segIndex = -1;            String tempString = null;            while ( ( index = tmpPath.indexOf( "/../" ) ) > 0 ) {                tempString = tmpPath.substring( 0, tmpPath.indexOf( "/../" ) );                segIndex = tempString.lastIndexOf( '/' );                if ( segIndex != -1 )                    if ( !tempString.substring( segIndex++ ).equals( ".." ) )                        tmpPath = tmpPath.substring( 0, segIndex ).concat( tmpPath.substring( index + 4 ) );            }            // 6f - remove ending "<segment>/.." where "<segment>" is a            // complete path segment            if ( tmpPath.endsWith( "/.." ) ) {                tempString = tmpPath.substring( 0, tmpPath.length() - 3 );                segIndex = tempString.lastIndexOf( '/' );                if ( segIndex != -1 )                    tmpPath = tmpPath.substring( 0, segIndex + 1 );            }            _path = tmpPath;        }    }    /**     * Initialize the scheme for this URI from a URI string spec.     *     * @param uriSpec the URI specification (cannot be null)     * @throws MalformedURIException URI does not have a conformant scheme     */    private void initializeScheme( String uriSpec )        throws MalformedURIException    {        int uriSpecLen = uriSpec.length();        int index = 0;        String scheme = null;        char testChar = '\0';        while ( index < uriSpecLen ) {            testChar = uriSpec.charAt( index );            if ( testChar == ':' || testChar == '/' || testChar == '?' || testChar == '#' )                break;            index++;        }        scheme = uriSpec.substring( 0, index );        if ( scheme.length() == 0 )            throw new MalformedURIException( "No scheme found in URI." );        else            setScheme( scheme );    }    /**     * Initialize the authority (userinfo, host and port) for this     * URI from a URI string spec.     *     * @param uriSpec the URI specification (cannot be null)     * @throws MalformedURIException uriSpec violates syntax rules     */    private void initializeAuthority( String uriSpec )        throws MalformedURIException    {        int index = 0;        int start = 0;        int end = uriSpec.length();        char testChar = '\0';        String userinfo = null;        // userinfo is everything up @        if ( uriSpec.indexOf( '@', start ) != -1 ) {            while ( index < end ) {                testChar = uriSpec.charAt( index );                if ( testChar == '@' )                    break;                index++;            }            userinfo = uriSpec.substring( start, index );            index++;        }        // host is everything up to ':'        String host = null;        start = index;        while ( index < end ) {            testChar = uriSpec.charAt( index );            if ( testChar == ':' )                break;            index++;        }        host = uriSpec.substring( start, index );        int port = -1;        if ( host.length() > 0 ) {            // port            if ( testChar == ':' ) {                index++;                start = index;                while ( index < end )                    index++;                String portStr = uriSpec.substring( start, index );                if ( portStr.length() > 0 ) {                    for ( int i = 0 ; i < portStr.length() ; i++ )                        if ( !isDigit( portStr.charAt( i ) ) )                            throw new MalformedURIException( portStr + " is invalid. Port should only contain digits!" );                    try {                        port = Integer.parseInt( portStr );                    } catch ( NumberFormatException nfe ) {                        // can't happen                    }                }            }        }        setHost( host );        setPort( port );        setUserinfo( userinfo );    }    /**     * Initialize the path for this URI from a URI string spec.     *     * @param uriSpec the URI specification (cannot be null)     * @throws MalformedURIException uriSpec violates syntax rules     */    private void initializePath( String uriSpec )        throws MalformedURIException    {        if ( uriSpec == null )            throw new MalformedURIException( "Argument uriSpec is null" );        int index = 0;        int start = 0;        int end = uriSpec.length();        char testChar = '\0';        // path - everything up to query string or fragment        while ( index < end ) {            testChar = uriSpec.charAt( index );            if ( testChar == '?' || testChar == '#' )                break;            // check for valid escape sequence            if ( testChar == '%' ) {                if ( index + 2 >= end || ! isHex( uriSpec.charAt( index + 1 ) ) ||                     ! isHex( uriSpec.charAt( index + 2 ) ) )                    throw new MalformedURIException( "Path contains invalid escape sequence!" );            } else if ( ! isReservedCharacter( testChar ) &&                        ! isUnreservedCharacter( testChar ) ) {

⌨️ 快捷键说明

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