Ler arquivos Xml com Unmarshaller ?[resolvido e explicado]

Tenho uns arquivos simples em xml e foram feitos com JaxB mas agora não sei como ler, sei que vou ter que usar Unmarshaller mas não sei como.

arquivos simples

tipo

[code]<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>

  • Numero do driver fornecedor Numero do driver Receptor [/code]

como posso fazer isso ?

Amigo,

Dê uma olhada nestes link’s que vão ajudar:
http://blog.caelum.com.br/jaxb-xml-e-java-de-maos-dadas/
http://www.devmedia.com.br/introducao-a-jaxb-2/11547
http://mballem.wordpress.com/2012/04/02/xml-trabalhando-com-jaxb/


File file = new File("c:/k Atualizador/Drivers.xml");
javax.xml.bind.Marshaller marshaller;

public boolean  Ler() throws Exception{

        boolean test=false;
 

try{

       Unmarshaller ler =context.createUnmarshaller();
       Object clase= ler.unmarshal(file); 
       marshaller.marshal(clase,System.out);	
       DRIVERS drivers= (DRIVERS)clase;
       
       JOptionPane.showMessageDialog(null,drivers.getDRIVER_RECEPTOR());
       
       //Driver_receptor =endereco.getNodeValue();

                                test=true;

}
catch(Exception ex){

            ex.printStackTrace();
            test=false;
            JOptionPane.showMessageDialog(null, "ERRO AO RECUPERAR OS DRIVERS "+ex.toString()," ERRO  20 ",JOptionPane.ERROR_MESSAGE);

 }


Estou fazendo esse código mas esta entrando no catch esse erro ai e a descrição do erro é

java.lang.NullPointerException

como posso resolver ?

É por que vc não instanciou o objeto marshaller

Como assim ?

esse é o código completo !


public class RECUPERAR_DRIVERS {

 private String Driver_fornecedor="";
 private String Driver_receptor="";
 File file = new File("c:/k Atualizador/Drivers.xml");
 DRIVERS Drivers = new DRIVERS();
 JAXBContext context;
 javax.xml.bind.Marshaller marshaller;
 
 public RECUPERAR_DRIVERS(){

 }
    public boolean Salvar(String Driver_fornecedor,String Driver_receptor){

        boolean test=false;
        Drivers.setDRIVER_FORNECEDOR(Driver_fornecedor);
        Drivers.setDRIVER_RECEPTOR(Driver_receptor);
        
        try{
            context=JAXBContext.newInstance(DRIVERS.class);
            marshaller = context.createMarshaller();
            
            marshaller.marshal(Drivers ,file);
                
                test=true;
        }
        catch(Exception ex){

            ex.printStackTrace();
            JOptionPane.showMessageDialog(null, "ERRO AO SALAVAR OS DIVERS \n\r "+ex.toString(),"ERRO  12",JOptionPane.ERROR_MESSAGE);
            test=false;
}


        return test;
    }  
public boolean  Ler() throws Exception{

        boolean test=false;
 

try{
       
       context=JAXBContext.newInstance(DRIVERS.class);
       Unmarshaller ler =context.createUnmarshaller();
       Object clase= ler.unmarshal(file); 
       marshaller.marshal(clase,System.out);	
       JOptionPane.showMessageDialog(null,"test ok");
       DRIVERS drivers= (DRIVERS)clase;
       
       JOptionPane.showMessageDialog(null,drivers.getDRIVER_RECEPTOR());
       
       

                                test=true;

}
catch(Exception ex){

            ex.printStackTrace();
            test=false;
            JOptionPane.showMessageDialog(null, "ERRO AO RECUPERAR OS DRIVERS "+ex.toString()," ERRO  20 ",JOptionPane.ERROR_MESSAGE);

 }



 return test;
    }






context=JAXBContext.newInstance(DRIVERS.class); Unmarshaller ler =context.createUnmarshaller(); Object clase= ler.unmarshal(file); marshaller.marshal(clase,System.out);

[quote=zoren]context=JAXBContext.newInstance(DRIVERS.class); Unmarshaller ler =context.createUnmarshaller(); Object clase= ler.unmarshal(file); marshaller.marshal(clase,System.out); [/quote]

Não entendi pois isso já tenho no meu código

esta dando erro justamente nessa linha

marshaller.marshal(clase,System.out);

por que não estou entendendo, pois queria pegar esses dados usa-los novamente !

Está dando null pointer exception, pq o objeto marshaller não está instanciado.

O seu primeiro método tem uma linha que cria uma instancia desse objeto

[quote=zoren]Está dando null pointer exception, pq o objeto marshaller não está instanciado.

O seu primeiro método tem uma linha que cria uma instancia desse objeto[/quote]

Cara perdoe minha ignorância, mas não estou conseguindo ver esse erro !
porque eu mexo mais e com o Xstrem !!! e to meio perdido aqui !
acho que é esse System.out que ta errado não ?

criando o arquivo

            context=JAXBContext.newInstance(DRIVERS.class);  // instanciado aqui ou estou errado 
            marshaller = context.createMarshaller();  
              
            marshaller.marshal(Drivers ,file);  

lendo o arquivo



       context=JAXBContext.newInstance(DRIVERS.class);  // instanciando aqui ou estou errado 
       Unmarshaller ler =context.createUnmarshaller();  
       Object clase= ler.unmarshal(file);   
       marshaller.marshal(clase,System.out);      
       JOptionPane.showMessageDialog(null,"test ok");  
       DRIVERS drivers= (DRIVERS)clase;  

Seguinte,

vc só instancia o objeto marshaller no método salvar.

No método ler, vc só chama direto sem instanciar ou verificar se ele não é nulo.

Se você chamar o salvar antes do ler de uma mesma instancia vai funcionar.

Mas para estar acontecendo esse erro, provavelemente, você esta chamando o método na ordem inversa ou está usando outra instancia do objeto da classe RECUPERAR_DRIVERS.

Para resolver, é só você adicionar essa linha:

marshaller = context.createMarshaller();

Antes de chamar o método marshal no seu método ler.

[quote=zoren]Seguinte,

vc só instancia o objeto marshaller no método salvar.

No método ler, vc só chama direto sem instanciar ou verificar se ele não é nulo.

Se você chamar o salvar antes do ler de uma mesma instancia vai funcionar.

Mas para estar acontecendo esse erro, provavelemente, você esta chamando o método na ordem inversa ou está usando outra instancia do objeto da classe RECUPERAR_DRIVERS.

Para resolver, é só você adicionar essa linha:

marshaller = context.createMarshaller();

Antes de chamar o método marshal no seu método ler.[/quote]

Agora acho que entendi ele esta sendo instanciado e salvando o arquivo … certo … mas se o arquivo já estiver salvo que é o meu caso ele esta como nulo ou se posso dizer assim não instanciado !

Cara valeu mesmo, nem se quer tinha passado isso pela minha cabeça, porque já tinha instanciando ele no método anterior !!!