Error en lectura de archivo fuera del Application Server

Tengo una pagina JSP encargada del proceso de “download” para cualquier archivo. Esta había sido probada en varios sistemas operativos hasta que me topé con Solaris. En Solaris uno no puede leer un archivo que este fuera de la ruta del servidor de aplicaciones, envía error y no lee el archivo (en otros sistemas operativos no sucede). Para poder hacerlo no hay que abrirlo como File sino como URL, pero para abrirlo como URL, hay que antepornerle el protocolo ‘file://’, siendo esto compatible con todos los sistemas operativos.

String file = "file://" + request.getParameter("file");
	
OutputStream output = response.getOutputStream();
InputStream in = null;
try {
    URL url = new URL(file);
    in = url.openStream();
    byte[  ] buf = new byte[4 * 1024]; 
    int bytesRead;
    while ((bytesRead = in.read(buf)) != -1) {
        output.write(buf, 0, bytesRead);
    }
} finally {
    if (in != null) in.close();
}

La verdad es que independientemente del sistema operativo esto debió ser siempre así, sólo que muchas veces uno se queda con lo primero que le resulta.

Publicado en Desarrollo, Java, JBoss, JEE