All Downloads are FREE. Search and download functionalities are using the official Maven repository.

java.net.JarURLConnection Maven / Gradle / Ivy

/*
 *  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.
 */

package java.net;

import java.io.IOException;
import java.security.cert.Certificate;
import java.util.jar.Attributes;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.jar.Manifest;

/**
 * This class establishes a connection to a {@code jar:} URL using the {@code
 * JAR} protocol. A {@code JarURLConnection} instance can refer to either a JAR
 * archive file or to an entry of such a file. {@code jar:} URLs are specified
 * as follows: jar:{archive-url}!/{entry} where "!/" is called a
 * separator. This separator is important to determine if an archive or an entry
 * of an archive is referred.
 * 

* Examples: *

  • Archive: {@code jar:http://www.example.com/applets/archive.jar!/}
  • *
  • File Entry: {@code * jar:http://www.example.com/applets/archive.jar!/test.class}
  • *
  • Directory Entry: {@code * jar:http://www.example.com/applets/archive.jar!/applets/}
  • */ public abstract class JarURLConnection extends URLConnection { /** * The location part of the represented URL. */ protected URLConnection jarFileURLConnection; private String entryName; private URL fileURL; // the file component of the URL private String file; /** * Constructs an instance of {@code JarURLConnection} that refers to the * specified URL. * * @param url * the URL that contains the location to connect to. * @throws MalformedURLException * if an invalid URL has been entered. */ protected JarURLConnection(URL url) throws MalformedURLException { super(url); file = url.getFile(); int sepIdx; if ((sepIdx = file.indexOf("!/")) < 0) { throw new MalformedURLException(); } fileURL = new URL(url.getFile().substring(0,sepIdx)); sepIdx += 2; if (file.length() == sepIdx) { return; } entryName = file.substring(sepIdx, file.length()); if (url.getRef() != null) { entryName += "#" + url.getRef(); } } /** * Returns all attributes of the {@code JarEntry} referenced by this {@code * JarURLConnection}. * * @return the attributes of the referenced {@code JarEntry}. * @throws IOException * if an I/O exception occurs while retrieving the * JAR-entries. */ public Attributes getAttributes() throws java.io.IOException { JarEntry jEntry = getJarEntry(); return (jEntry == null) ? null : jEntry.getAttributes(); } /** * Returns all certificates of the {@code JarEntry} referenced by this * {@code JarURLConnection} instance. This method will return {@code null} * until the {@code InputStream} has been completely verified. * * @return the certificates of the {@code JarEntry} as an array. * @throws IOException * if there is an I/O exception occurs while getting the * {@code JarEntry}. */ public Certificate[] getCertificates() throws java.io.IOException { JarEntry jEntry = getJarEntry(); if (jEntry == null) { return null; } return jEntry.getCertificates(); } /** * Gets the name of the entry referenced by this {@code JarURLConnection}. * The return value will be {@code null} if this instance refers to a JAR * file rather than an JAR file entry. * * @return the {@code JarEntry} name this instance refers to. */ public String getEntryName() { return entryName; } /** * Gets the {@code JarEntry} object of the entry referenced by this {@code * JarURLConnection}. * * @return the referenced {@code JarEntry} object or {@code null} if no * entry name is specified. * @throws IOException * if an error occurs while getting the file or file-entry. */ public JarEntry getJarEntry() throws IOException { if (!connected) { connect(); } if (entryName == null) { return null; } // The entry must exist since the connect succeeded return getJarFile().getJarEntry(entryName); } /** * Gets the manifest file associated with this JAR-URL. * * @return the manifest of the referenced JAR-file. * @throws IOException * if an error occurs while getting the manifest file. */ public Manifest getManifest() throws java.io.IOException { return (Manifest)getJarFile().getManifest().clone(); } /** * Gets the {@code JarFile} object referenced by this {@code * JarURLConnection}. * * @return the referenced JarFile object. * @throws IOException * if an I/O exception occurs while retrieving the JAR-file. */ public abstract JarFile getJarFile() throws java.io.IOException; /** * Gets the URL to the JAR-file referenced by this {@code JarURLConnection}. * * @return the URL to the JAR-file or {@code null} if there was an error * retrieving the URL. */ public URL getJarFileURL() { return fileURL; } /** * Gets all attributes of the manifest file referenced by this {@code * JarURLConnection}. If this instance refers to a JAR-file rather than a * JAR-file entry, {@code null} will be returned. * * @return the attributes of the manifest file or {@code null}. * @throws IOException * if an I/O exception occurs while retrieving the {@code * JarFile}. */ public Attributes getMainAttributes() throws java.io.IOException { Manifest m = getJarFile().getManifest(); return (m == null) ? null : m.getMainAttributes(); } }




    © 2015 - 2024 Weber Informatics LLC | Privacy Policy