Erro com XML em um .jar

4 respostas
S

Pessoal é o seguinte:

tenho um metodo aqui que acessa um xml e retorna uma collection.
a estrutura do meu xml é a seguinte:

<?xml version="1.0" encoding="iso-8859-1" ?> 
- <MUNICIPIO>
- <DATA_RECORD>
       <CODIGO>63808000</CODIGO> 
       <DESCRICAO>2 DTS MIRANDELA(R POMBAL)</DESCRICAO> 
       <UF>BA</UF> 
  </DATA_RECORD>
- <DATA_RECORD>
      <CODIGO>60160000</CODIGO> 
      <DESCRICAO>A. DO PAULISTA</DESCRICAO> 
      <UF>BA</UF> 
  </DATA_RECORD> ... etc..
Quando executo meu programa pela IDE, ele roda certinho.. o metodo vai lá busca o código [ nodelist.item(i).getChildNodes().item(0).getChildNodes().item(0).getNodeValue())] ,

descrição do municipio [nodelist.item(i).getChildNodes().item(1).getChildNodes().item(0).getNodeValue()] e a

UF [nodelist.item(i).getChildNodes().item(2).getChildNodes().item(0).getNodeValue() ] em minha XML.

... Mas quando rodo no .jar, meu metódo não consegue mais achar a descrição e a UF(java.lang.NullPointerException).
Inclusive quando chamo [nodelist.item(i).getChildNodes().item(1).getChildNodes().item(0).getNodeValue()] que
seria a Descrição, ele acaba trazendo o Código...

Pq no IDE meu código ele consegue encontrar tudo no XML .. Roda certinho..
Mas no .jar ele não consegue mais ? Alguém sabe o porquê ?

Valeu !

Segue o metodo que uso:
************************************************************

public Collection obterMunicipioUf(UfModel pUf)
  {
     Collection lCol = new ArrayList();
     java.net.URL URLTipoProcesso;
 
     
     String xml="";
     
     try
     {
       
       BufferedInputStream buff = new BufferedInputStream(URLTipoProcesso.openStream()); 
       int length = buff.available();
       byte[] bytes = new byte[length];
       buff.read(bytes);
       xml = new String(bytes);       
      
     }
     catch (IOException e)
     {
        e.printStackTrace();
     }

     try 
     {
       Document doc  = Util.parseXmlFile(xml);   
       String xpath  = "/MUNICIPIO/DATA_RECORD[UF=\""+pUf.getUf().trim()+"\"]";
       NodeList nodelist = org.apache.xpath.XPathAPI.selectNodeList(doc, xpath);
   [i]    for(int i=0;i<nodelist.getLength();i++){
           MunicipioModel lMunicipio = new MunicipioModel();
                     
           lMunicipio.setCodigo(new Long(nodelist.item(i).getChildNodes().item(0).getChildNodes().item(0).getNodeValue())); [b]//NO .JAR GERA A EXCEÇÃO AQUI !! java.lang.NullPointerException.[/b]                                         
           lMunicipio.setDescricao(nodelist.item(i).getChildNodes().item(1).getChildNodes().item(0).getNodeValue()); [b]// E AQUI ELE CABA TRAZENDO O CÓDIGO AO INVEZ DA DESCRIÇÃO...[/b]          
           lCol.add(lMunicipio);[/i]
           
        }
        
      } 
     catch (javax.xml.transform.TransformerException e) 
     {
        e.printStackTrace();
     }     
     catch (Exception e) 
     {
        e.printStackTrace();
     }
     return lCol;
  }

4 Respostas

black_fire

Manda a exception…

S

A exception é: java.lang.NullPointerException

Pelo que percebi, ele tenta ler a posição ( nodelist.item(i).getChildNodes().item(0)…) do XML que seria a Codigo… mas nada encontra.
Se eu tentar acessar a posição (nodelist.item(i).getChildNodes().item(1)…) ele acha o código.

era como se a arvore do xml , quando rodo pela ide, começasse pelo nivel 0… e arvore do xml quando rodo o jar começasse com nivel 1.

entendeu ? aí quando tento acessar o nivel 0 no jar, gera a exceção.

Pedrosa

Que coisa estranha!

S

é realmente estranho… mas consegui resolver…

Por exemplo:

o Codigo do municipio que estaria no node(0) -> quando executo do .jar ele se encontra no node(1)

a descrição que estaria no node(1) -> quando executo do .jar ele se encontra no node(3)

e a uf a que estaria no node(2) -> quando executo do .jar ele se encontra no node(5)

Começou indexando de 1 e foi pulando de 2 em 2…

porquê ? Quem souber morre!

Mas valeu galera,

Abraços.

Criado 26 de abril de 2006
Ultima resposta 27 de abr. de 2006
Respostas 4
Participantes 3