Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di Lomio
    Registrato dal
    Jul 2010
    Messaggi
    160

    [JAVA] com.thoughtworks.xstream.mapper.CannotResolveClass Exception: damiera : damiera

    Ciao a tutti, sto provando a usare XStream...per quanto riguarda il salvare in un file xml non ci sono problemi ma quando provo a caricare il file appena generato mi lancia un'eccezione!!!
    Il codice è questo:

    codice:
    public class Partita {
    	
    	Partita() {
    		new Damiera();
    	}
    
    	private XStream xstream = new XStream();
    	private String xml;
    
    	public boolean salva() {
    		xstream.alias("Damiera", Damiera.class);
    
    		Damiera damiera = new Damiera();
    		xml = xstream.toXML(damiera);
    
    		try {
    			PrintStream output = new PrintStream(new FileOutputStream("/home/sinapsi/Scrivania/Eclipse/Dama/save.xml"));
    			output.print(xml);
    			return true;
    		} catch (IOException e) {
    			e.printStackTrace();
    			return false;
    		}
    	}
        
    	public Damiera carica() throws SAXException, IOException, ParserConfigurationException {
    		FileReader fr = new FileReader("/home/sinapsi/Scrivania/Eclipse/Dama/save.xml");
            BufferedReader file = new BufferedReader(fr);
            String s = "";
            
            while(file.readLine() != null) {
            	s = s + file.readLine() + "\n";
            }
            
    		Damiera damieraCaricata = (Damiera) xstream.fromXML(s);
    		return damieraCaricata;
    	}
     
    }

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] com.thoughtworks.xstream.mapper.CannotResolveClass Exception: damiera : damiera

    Originariamente inviato da Lomio
    Ciao a tutti, sto provando a usare XStream...per quanto riguarda il salvare in un file xml non ci sono problemi ma quando provo a caricare il file appena generato mi lancia un'eccezione!!!
    Premetto che non ho mai usato XStream (da quello che vedo in rete, è una libreria per il "mapping" tra XML e classi Java ... più o meno come fanno altre API/librerie).

    Comunque quello che noto è che alias() l'hai usato in salva() e l'oggetto XStream è unico e "vive" durante la vita di un oggetto Partita. Presumo che alias() dovresti farlo anche per carica(). Ma il fatto che l'hai fatto solo in salva() non ha comunque molto senso. Se vuoi che la configurazione del XStream sia "stabile" fai l'alias nel costruttore di Partita.

    Originariamente inviato da Lomio
    codice:
    	FileReader fr = new FileReader("/home/sinapsi/Scrivania/Eclipse/Dama/save.xml");
            BufferedReader file = new BufferedReader(fr);
            String s = "";
            
            while(file.readLine() != null) {
            	s = s + file.readLine() + "\n";
            }
    A parte il fatto che è un obbrobrio, perché usi la "concatenazione" delle stringhe ad ogni riga. Ma poi comunque è inutile.
    Per quello che posso vedere dal javadoc di XStream, ci sono varie versioni di fromXML(), tra cui quelle:

    Object fromXML(InputStream input)
    Object fromXML(Reader xml)

    Se proprio vuoi usare la seconda, basta solo passare direttamente il FileReader!!!
    Ma sarebbe però meglio un FileInputStream, perché così le questioni sul charset se le gestisce la libreria (dalla dichiarazione XML).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it L'avatar di Lomio
    Registrato dal
    Jul 2010
    Messaggi
    160
    Comunque quello che noto è che alias() l'hai usato in salva() e l'oggetto XStream è unico e "vive" durante la vita di un oggetto Partita. Presumo che alias() dovresti farlo anche per carica(). Ma il fatto che l'hai fatto solo in salva() non ha comunque molto senso. Se vuoi che la configurazione del XStream sia "stabile" fai l'alias nel costruttore di Partita.
    Hai ragione, ma non essendo molto pratico per il momento mi sono "ispirato" al tutorial di XStream http://xstream.codehaus.org/tutorial.html

    il quale non fa riferimento all'utilizzo di alias() anche per caricare il file xml.

    Per quanto riguarda il resto del codice so che è abbastanza una porcata ma ho postato uno dei 1000 tentativi fatti per provare a farlo funzionare!!!

    Adesso ho provato a fare una cosa del genere:

    codice:
    FileInputStream file = new FileInputStream("/home/sinapsi/Scrivania/Eclipse/Dama/save.xml");
            int c = file.read();
            List<Byte> arr = new ArrayList<Byte>();
           
            while(c != -1) {
            	c = file.read();
            	arr.add((byte) c);
            }
            
            StringBuilder sb = new StringBuilder (arr.size());
            
            for (byte a: arr) {
                if (a != 32) {
                    sb.append ((char) a);
                }
            }
            
             String s = sb.toString ();
            System.out.println(s);
    		Damiera damieraCaricata = (Damiera) xstream.fromXML(s);
    		return damieraCaricata;
    il risultato del test è questo:

    com.thoughtworks.xstream.io.StreamException: : only whitespace content allowed before start tag and not D (position: START_DOCUMENT seen D... @1:1)

    La prima riga del mio file save.xml è questa:
    <Damiera>

    non capisco proprio...

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Lomio
    codice:
    FileInputStream file = new FileInputStream("/home/sinapsi/Scrivania/Eclipse/Dama/save.xml");
            int c = file.read();
            List<Byte> arr = new ArrayList<Byte>();
           
            while(c != -1) {
            	c = file.read();
            	arr.add((byte) c);
            }
            
            StringBuilder sb = new StringBuilder (arr.size());
            
            for (byte a: arr) {
                if (a != 32) {
                    sb.append ((char) a);
                }
            }
            
             String s = sb.toString ();
            System.out.println(s);
    		Damiera damieraCaricata = (Damiera) xstream.fromXML(s);
    		return damieraCaricata;
    Ma io non mi capacito del perché devi fare tutto 'sto macello. Crei un ArrayList di Byte (tra l'altro sono appunto oggetti, non primitivi).
    Poi leggi 1 byte per volta (comunque poco efficiente) e ogni byte viene "auto boxato" (grazie a Java 5) in oggetto Byte e messo nella lista.
    Poi fai una iterazione sulla lista e se non è uno spazio, appendi nello StringBuilder. In pratica togli tutti gli spazi!!

    Ma certi spazi, sono importanti, non li puoi togliere!! Non so come è fatto il XML in questione ma mi sembra palese ad esempio che già solo la dichiarazione XML del tipo:

    <?xml version="1.0" encoding="UTF-8"?>

    NON la puoi far diventare

    <?xmlversion="1.0"encoding="UTF-8"?>

    Stesso discorso se in qualche tag nel documento ci sono attributi.


    E comunque ripeto quanto detto prima: fromXml può usare direttamente un InputStream:

    codice:
    FileInputStream fis = new FileInputStream("/home/sinapsi/Scrivania/Eclipse/Dama/save.xml");
    Damiera damieraCaricata = (Damiera) xstream.fromXML(fis);
    Punto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di Lomio
    Registrato dal
    Jul 2010
    Messaggi
    160
    Mmmh...ok grazie, stavo facendo un po' di confusione con FileInputStream.

    Comunque modificandolo come suggerito da te, mi rigenera l'eccezione iniziale!
    Continuerò a smanettare qua e là e se riesco a venirne fuori posto la soluzione, comunque sia grazie per la disponibilità
    La legge e l'ordine saranno rispettati solo quando si concederà la giustizia a tutti indistintamente.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.