Pessoal, talvez seja simples (até bobo), mas é que eu tô tão cansado que eu não aguento mais olhar pra esse código… se alguém tiver a luz de ver onde estou errando…
Estou tentando parsear (SAX) um arquivo XML dentro de um JAR.
O plano era simples, crio um InputStream para a entrada (JarEntry) que eu quero ler e passo ela para o método parse() da classe DocumentBuilder.
Mas não funciona… ele diz q o “Stream está fechado”…
Pois é, mas não acho o “malditinho”…
Eis um exemplo:
import org.w3c.dom.*;
import javax.xml.parsers.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.util.jar.*;
public class Teste {
public static void main(String[] args) {
try {
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(new File("jx.jar")));
JarInputStream jis = new JarInputStream(bis);
JarEntry je = null;
while ((je = jis.getNextJarEntry()) != null) {
if (je.getName().equals("TEMP/x.xml")) UmMetodo(jis);
}
}
catch (Throwable e) {
e.printStackTrace();
}
}
public static void UmMetodo(InputStream istream) {
try {
DocumentBuilderFactory df = DocumentBuilderFactory.newInstance();
DocumentBuilder db = df.newDocumentBuilder();
Document docxml = db.parse(istream);
}
catch (Throwable e) {
e.printStackTrace();
}
}
}
e o erro:
java.io.IOException: Stream closed
at java.util.zip.ZipInputStream.ensureOpen(ZipInputStream.java:43)
at java.util.zip.ZipInputStream.getNextEntry(ZipInputStream.java:67)
at java.util.jar.JarInputStream.getNextEntry(JarInputStream.java:114)
at java.util.jar.JarInputStream.getNextJarEntry(JarInputStream.java:142)
at Teste.main(Teste.java:20)
Se alguém puder me ajudar…, agradeço.