User: user57
Date: 02/02/24 18:29:42
Added: src/main/org/jboss/net/protocol/njar Handler.java
NestedJarURLHandlerFactory.java package.html
Log:
o njar is now a protocol handler thanb can be used with the
java.protocol.handler.pkgs sys property.
Revision Changes Path
1.1 jboss-common/src/main/org/jboss/net/protocol/njar/Handler.java
Index: Handler.java
===================================================================
/***************************************
* *
* JBoss: The OpenSource J2EE WebOS *
* *
* Distributable under LGPL license. *
* See terms of license at gnu.org. *
* *
***************************************/
package org.jboss.net.protocol.njar;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLStreamHandler;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
/**
* A protocol handler for the 'njar' protocol.
*
* <p>
* This is class allows you to use the njar: URL protocol. It is very
* similar to it's jar: cusin. The difference being that jars can be
* nested.
*
* <p>
* An example of how to use this class is:
* <pre>
*
* NestedJarURLHandlerFactory.start();
* URL u = new URL("njar:njar:file:c:/test1.zip^/test2.zip^/hello.txt");
* u.openStream();
*
* </pre>
*
* <p>
* Please be aware that the njar protocol caches it's jar in temporary
* storage when connections are opened into them. So for the above
* example, 2 files would cached a temp files names similar to nested-xxxx.jar
*
* <p>
* TODO: Add accessors so that the cache can be flushed.
*
* @version <tt>$Revision: 1.1 $</tt>
* @author <a href="mailto:[EMAIL PROTECTED]">Hiram Chirino</a>
*/
public class Handler
extends URLStreamHandler
{
// URL protocol designations
public static final String PROTOCOL = "njar";
public static final String NJAR_SEPARATOR = "^/";
public static final String JAR_SEPARATOR = "!/";
protected Map savedJars = new HashMap();
public URLConnection openConnection(final URL url)
throws IOException
{
String file = url.getFile();
String embeddedURL = file;
String jarPath = "";
int pos = file.lastIndexOf(NJAR_SEPARATOR);
if (pos >= 0)
{
embeddedURL = file.substring(0, pos);
if (file.length() > pos + NJAR_SEPARATOR.length())
jarPath = file.substring(pos + NJAR_SEPARATOR.length());
}
if (embeddedURL.startsWith(PROTOCOL))
{
//System.out.println("Opening next nested jar: " + embeddedURL);
File tempJar = (File) savedJars.get(embeddedURL);
if (tempJar == null)
{
InputStream embededData = new URL(embeddedURL).openStream();
tempJar = File.createTempFile("nested-", ".jar");
tempJar.deleteOnExit();
//System.out.println("temp file location : " + tempJar);
storeJar(embededData, new FileOutputStream(tempJar));
savedJars.put(embeddedURL, tempJar);
}
String t = tempJar.getCanonicalFile().toURL().toExternalForm();
//System.out.println("file URL : " + t);
t = "njar:" + t + NJAR_SEPARATOR + jarPath;
//System.out.println("Opening saved jar: " + t);
return new URL(t).openConnection();
}
else
{
//System.out.println("Opening final nested jar: " + embeddedURL);
return new URL("jar:" + embeddedURL + JAR_SEPARATOR +
jarPath).openConnection();
}
}
protected void storeJar(final InputStream in, final OutputStream out)
throws IOException
{
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try
{
bis = new BufferedInputStream(in);
bos = new BufferedOutputStream(out);
byte data[] = new byte[512];
int c;
while ((c = bis.read(data)) >= 0)
{
bos.write(data, 0, c);
}
}
finally
{
try
{
bis.close();
}
catch (IOException ignore)
{
}
try
{
bos.close();
}
catch (IOException ignore)
{
}
}
}
}
1.1
jboss-common/src/main/org/jboss/net/protocol/njar/NestedJarURLHandlerFactory.java
Index: NestedJarURLHandlerFactory.java
===================================================================
/***************************************
* *
* JBoss: The OpenSource J2EE WebOS *
* *
* Distributable under LGPL license. *
* See terms of license at gnu.org. *
* *
***************************************/
package org.jboss.net.protocol.njar;
import java.net.URL;
import java.net.URLStreamHandler;
import java.net.URLStreamHandlerFactory;
/**
* A simple factory for creating njar stream handlers.
* @version <tt>$Revision: 1.1 $</tt>
* @author <a href="mailto:[EMAIL PROTECTED]">Hiram Chirino</a>
*/
public class NestedJarURLHandlerFactory
implements URLStreamHandlerFactory
{
Handler handler = new Handler();
public URLStreamHandler createURLStreamHandler(String protocol)
{
if (protocol.equals(Handler.PROTOCOL))
return handler;
return null;
}
public static void start()
{
URL.setURLStreamHandlerFactory(new NestedJarURLHandlerFactory());
}
}
1.1 jboss-common/src/main/org/jboss/net/protocol/njar/package.html
Index: package.html
===================================================================
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<!-- $Id: package.html,v 1.1 2002/02/25 02:29:42 user57 Exp $ -->
<!--
JBoss: The OpenSource J2EE WebOS
Distributable under LGPL license.
See terms of license at gnu.org.
-->
</head>
<body bgcolor="white">
<p>Provides a nested jar ('njar') protocol handler.
<h2>Package Specification</h2>
<ul>
<li><a href="javascript: alert('not available')">Not Available</a>
</ul>
<h2>Related Documentation</h2>
<ul>
<li><a href="javascript: alert('not available')">Not Available</a>
</ul>
<h2>Package Status</h2>
<ul>
<li><font color="green"><b>STABLE</b></font>
</ul>
<h2>Todo</h2>
<ul>
<li>???
</ul>
<!-- Put @see and @since tags down here. -->
</body>
</html>
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development