Mega Code Archive

 
Categories / Java Tutorial / Network
 

Create and resolve URI

/*  * $HeadURL: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/module-client/src/main/java/org/apache/http/client/utils/URIUtils.java $  * $Revision: 687159 $  * $Date: 2008-08-19 22:20:46 +0100 (Tue, 19 Aug 2008) $  *  *  Licensed to the Apache Software Foundation (ASF) under one or more  *  contributor license agreements.  See the NOTICE file distributed with  *  this work for additional information regarding copyright ownership.  *  The ASF licenses this file to You under the Apache License, Version 2.0  *  (the "License"); you may not use this file except in compliance with  *  the License.  You may obtain a copy of the License at  *  *      http://www.apache.org/licenses/LICENSE-2.0  *  *  Unless required by applicable law or agreed to in writing, software  *  distributed under the License is distributed on an "AS IS" BASIS,  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  *  See the License for the specific language governing permissions and  *  limitations under the License.  *  * This software consists of voluntary contributions made by many  * individuals on behalf of the Apache Software Foundation.  For more  * information on the Apache Software Foundation, please see  * <http://www.apache.org/>.  *  */ import java.net.URI; import java.net.URISyntaxException; /**  * A collection of utilities for {@link URI URIs}, to workaround  * bugs within the class or for ease-of-use features.  */ public class URIUtils {      /**          * Constructs a {@link URI} using all the parameters. This should be          * used instead of          * {@link URI#URI(String, String, String, int, String, String, String)}          * or any of the other URI multi-argument URI constructors.          *           * See <a          * href="https://issues.apache.org/jira/browse/HTTPCLIENT-730">HTTPCLIENT-730</a>          * for more information.          *           * @param scheme          *            Scheme name          * @param host          *            Host name          * @param port          *            Port number          * @param path          *            Path          * @param query          *            Query          * @param fragment          *            Fragment          *           * @throws URISyntaxException          *             If both a scheme and a path are given but the path is          *             relative, if the URI string constructed from the given          *             components violates RFC&nbsp;2396, or if the authority          *             component of the string is present but cannot be parsed          *             as a server-based authority          */     public static URI createURI(             final String scheme,             final String host,             int port,             final String path,             final String query,             final String fragment) throws URISyntaxException {                  StringBuilder buffer = new StringBuilder();         if (host != null) {             if (scheme != null) {                 buffer.append(scheme);                 buffer.append("://");             }             buffer.append(host);             if (port > 0) {                 buffer.append(':');                 buffer.append(port);             }         }         if (path == null || !path.startsWith("/")) {             buffer.append('/');         }         if (path != null) {             buffer.append(path);         }         if (query != null) {             buffer.append('?');             buffer.append(query);         }         if (fragment != null) {             buffer.append('#');             buffer.append(fragment);         }         return new URI(buffer.toString());     }     /**      * Resolves a URI reference against a base URI. Work-around for bug in      * java.net.URI (<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4708535>)      *      * @param baseURI the base URI      * @param reference the URI reference      * @return the resulting URI      */     public static URI resolve(final URI baseURI, final String reference) {         return URIUtils.resolve(baseURI, URI.create(reference));     }     /**      * Resolves a URI reference against a base URI. Work-around for bug in      * java.net.URI (<http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4708535>)      *      * @param baseURI the base URI      * @param reference the URI reference      * @return the resulting URI      */     public static URI resolve(final URI baseURI, URI reference){         if (baseURI == null) {             throw new IllegalArgumentException("Base URI may nor be null");         }         if (reference == null) {             throw new IllegalArgumentException("Reference URI may nor be null");         }         boolean emptyReference = reference.toString().length() == 0;         if (emptyReference) {             reference = URI.create("#");         }         URI resolved = baseURI.resolve(reference);         if (emptyReference) {             String resolvedString = resolved.toString();             resolved = URI.create(resolvedString.substring(0,                 resolvedString.indexOf('#')));         }         return resolved;     }     /**      * This class should not be instantiated.      */     private URIUtils() {     } }