| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2003 17:32:22
|
dango
JavaEvangelist
![[Avatar]](/images/avatar/c8a19a6140e2e852b3f66.gif)
Membro desde: 09/11/2002 08:56:47
Mensagens: 497
Localização: Catanduva SP
Offline
|
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:
e o erro:
Se alguém puder me ajudar..., agradeço.
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2003 17:43:19
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Algumas dúvidas que podem te ajudar:
- Acontece só com o SAX? Já tentou ler o arquivo, simplesmente, sem parsear?
- Funciona se vc colocar o JAR no Classpath e der um this.getClass().getResourceAsStream("TEMP/x.xml")?
[]'s
-cv
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2003 17:56:34
|
dango
JavaEvangelist
![[Avatar]](/images/avatar/c8a19a6140e2e852b3f66.gif)
Membro desde: 09/11/2002 08:56:47
Mensagens: 497
Localização: Catanduva SP
Offline
|
Hmmmm...
Ok, ler o arquivo sem parsear, sim... um JarInputStream, por herança, possui um método read()... então eu uso o JarEntry para posicionar o ponteiro do stream naquela entrada e faço a leitura normal....
Mas o segundo não tinha tentado, eu já tinha visto esse getResourceAsStream() em algum lugar (talvez num artigo da JavaWorld)... mas não é o caso... não há garantias de que o JAR em questão esteja no CLASSPATH... um usuário leigo talvez tivesse dificuldades de garantir isso.
Obrigado, de qualquer maneira.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/04/2003 18:05:20
|
cv
Moderador
![[Avatar]](/images/avatar/210f760a89db30aa72ca258a3483cc7f.jpg)
Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline
|
Se tudo mais falhar, leia o XML pra dentro de um StringBuffer (usando StringWriter/OutputStreamWriter), e aí sim chame o UmMetodo() então...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/04/2003 08:37:09
|
dango
JavaEvangelist
![[Avatar]](/images/avatar/c8a19a6140e2e852b3f66.gif)
Membro desde: 09/11/2002 08:56:47
Mensagens: 497
Localização: Catanduva SP
Offline
|
Pessoal, só pra registrar e deixar o topico com alguma definição.
Estive estudando o problema. Ocorre que ele faz a leitura do XML normalmente... *sem erros*... tudo certinho a partir do InputStream que eu passo pra ele.
Ocorre, que o seguinte trecho
funciona *perfeitamente*.
Quando obtenho o getNextJarEntry() o ponteiro do stream (jis) é posicionado no início dessa entrada. Então eu passo o stream para o método que fará a leitura do XML pelo SAX.
Ocorre, que logo após
o InputStream é *fechado*. Desse modo, ao avaliar a expressão while (do trecho de código anterior) o stream está fechado!
Desempacotei os fontes do Java e observei que em:
org.apache.crimson.parsers.Parser2
existe um método parseInternal() que, ao final do processo de parsing, simplesmente *fecha* o stream.
Legal ele, né?!
Queria saber o seguinte: esse comportamento é desejável?! Quero dizer, se eu passo um stream pra ele, é da alçada desse objeto fechá-lo? Não seria minha a responsabilidade de fechar esse stream?!
Para quem estiver lendo este tópico desejando parsear um documento XML que esteja dentro de um arquivo JAR ou ZIP, faça o seguinte
Pra mim, resolveu a contento.
Abraços.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/04/2003 08:49:06
|
Guilherme Silveira
Administrador
Membro desde: 14/08/2002 10:09:26
Mensagens: 1096
Localização: Sao Paulo
Offline
|
No seu caso com certeza nao eh desejavel.... acho importante enviar a noticia pro pessoal responsavel pelo projeto pq eles com certeza nao pensaram no caso que a stream apesar de chegar no final NAO deve ser fechada
|
-------------------------------------------------------
Guilherme Silveirahttp://blog.caelum.com.br
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 09/04/2003 15:07:46
|
dango
JavaEvangelist
![[Avatar]](/images/avatar/c8a19a6140e2e852b3f66.gif)
Membro desde: 09/11/2002 08:56:47
Mensagens: 497
Localização: Catanduva SP
Offline
|
Ok, vou mandar a dúvida sobre esse comportamento pro pessoal do grupo Apache.
Posto o resultado aqui, se obtiver uma resposta.
|
|
|
 |
|
|