Torna indietro   Hardware Upgrade Forum > Software > Programmazione

La rivoluzione dei dati in tempo reale è in arrivo. Un assaggio a Confluent Current 2025
La rivoluzione dei dati in tempo reale è in arrivo. Un assaggio a Confluent Current 2025
Siamo andati a Londra per partecipare a Current 2025, la conferenza annuale di Confluent. Il tema al centro dell'evento era l'elaborazione dei dati in tempo reale resa possibile da Apache Kafka, una piattaforma open source pensata proprio per questo. Si è parlato di come stia cambiando la gestione dei dati in tempo reale, del perché sia importante e di quali siano le prospettive per il futuro
SAP Sapphire 2025: con Joule l'intelligenza artificiale guida app, dati e decisioni
SAP Sapphire 2025: con Joule l'intelligenza artificiale guida app, dati e decisioni
A Madrid SAP rilancia sulla visione di un ecosistema integrato dove app, dati e AI generano un circolo virtuoso capace di affrontare l’incertezza globale. Joule diventa l’interfaccia universale del business, anche oltre il perimetro SAP
Dalle radio a transistor ai Micro LED: il viaggio di Hisense da Qingdao al mondo intero
Dalle radio a transistor ai Micro LED: il viaggio di Hisense da Qingdao al mondo intero
Una delle realtà a maggiore crescita nel mondo dell'elettronica di consumo, Hisense Group, affonda le sue radici nella storica città portuale di Qingdao, famosa per la sua birra. Ed è proprio qui il centro nevralgico dell'espansione mondiale dell'azienda, che sta investendo massicciamente in infrastrutture e ricerca per consolidare ulteriormente la propria leadership tecnologica.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-08-2003, 14:03   #1
Icedguardian
Member
 
Iscritto dal: May 2003
Messaggi: 283
java e XML

Ho fatto un piccolo prog in java che legge un file XML
solo che:

SAX parser utilizzato e' validante
Parser e': org.apache.xerces.jaxp.SAXParserImpl@127734f

Inizio parsing del file degli accounts
AccountUtente{AccountSAXHandler.startDocument()}
AccountUtente{AccountSAXHandler.startElement()}: <accounts>
AccountUtente{AccountSAXHandler.startElement()}: <account>
AccountUtente{AccountSAXHandler.startElement()}: <utente>
AccountUtente{AccountSAXHandler.startElement()}: <login>
AccountUtente{AccountSAXHandler.endElement()}: </login>
AccountUtente{AccountSAXHandler.startElement()}: <password>
AccountUtente{AccountSAXHandler.endElement()}: </password>
AccountUtente{AccountSAXHandler.startElement()}: <nome>
AccountUtente{AccountSAXHandler.endElement()}: </nome>
AccountUtente{AccountSAXHandler.startElement()}: <cognome>
AccountUtente{AccountSAXHandler.endElement()}: </cognome>
AccountUtente{AccountSAXHandler.endElement()}: </utente>
AccountMail.setSSL: false
AccountMail.setDeleteMail: true
AccountUtente{AccountSAXHandler.startElement()}: <mailAccount>
AccountUtente{AccountSAXHandler.startElement()}: <mailHost>
AccountMail.setHost: popmail.libero.it
AccountUtente{AccountSAXHandler.endElement()}: </mailHost>
AccountUtente{AccountSAXHandler.startElement()}: <mailLogin>
AccountMail.setLogin: quellocheè
AccountUtente{AccountSAXHandler.endElement()}: </mailLogin>
AccountUtente{AccountSAXHandler.startElement()}: <mailPassword>
AccountMail.setPassword: quellochetipare
AccountUtente{AccountSAXHandler.endElement()}: </mailPassword>
java.lang.NullPointerException
at org.apache.xerces.framework.XMLParser.parse(XMLParser.java:969)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:345)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:281)
at AccountUtente.newInstance(AccountUtente.java:70)
at ProvaAccounts.main(ProvaAccounts.java:22)

Fino a java.lang.NullPointerException sono msg che scrivo io per monitorare
quello che fa il prog.

Il file XML è:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE accounts SYSTEM "accounts.dtd">

<accounts>
<account accountID="a1">
<utente>
<login>elmir</login>
<password>pippo</password>
<nome>Elmir</nome>
<cognome>Muratovic</cognome>
</utente>
<mailAccount ssl="false" deleteMail="true">
<mailHost>popmail.libero.it</mailHost>
<mailLogin>quellocheè</mailLogin>
<mailPassword>quellochetipare</mailPassword>
</mailAccount>
</account>
</accounts>

Avete idea di quale potrebbe essere il problema.
Nella riga 70 di AccountUtente c'è soltanto il richiamo alla funzione di parsing del parser.
__________________
/***
* Nulla è impossibile per chi non deve farlo
***/
Icedguardian è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2003, 15:30   #2
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5705
posta il codice del costruttore di AccountUtente.
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 05-08-2003, 20:14   #3
Icedguardian
Member
 
Iscritto dal: May 2003
Messaggi: 283
/*
* AccountUtente.java
*
* Created on August 5, 2003, 10:52 AM
*/

/**
*
* @author elmir
*/

import java.util.LinkedList;
import org.xml.sax.helpers.DefaultHandler;
import org.xml.sax.Attributes;
import javax.xml.parsers.SAXParserFactory;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.ParserConfigurationException;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
import java.io.File;
import java.io.IOException;

public class AccountUtente {

final static String INPUT_XML_FILE = "../xml/accounts.xml";
final static boolean DEBUG = true;

String login; //Login dell'utente
String password; //Password dell'utente
String nome; //Nome dell'utente
String cognome; //Cognome dell'utente
LinkedList accounts; //Gli account che l'utente possiede

AccountSAXHandler handler; //Handler utilizzato durante il parsing

/** Metodo che permette la creazione di AccountUtente ma soltanto se
la login e la password sono corrette (presenti nel file XML) */
static public AccountUtente newInstance(String l, String pass){

File xmlFile = new File(INPUT_XML_FILE);
SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser parser = null;
spf.setValidating(true);

AccountUtente account = new AccountUtente(l);

if(DEBUG)
System.out.println("SAX parser utilizzato " + (spf.isValidating() ? "e'" : "non e'") + " validante");

try{

parser = spf.newSAXParser();

if(DEBUG)
System.out.println("Parser e': " + parser);
}catch(SAXException se){

se.printStackTrace(System.out);
System.exit(1);
}catch(ParserConfigurationException pce){

pce.printStackTrace(System.out);
System.exit(1);
}

if(DEBUG)
System.out.println("\nInizio parsing del file degli accounts");

try{

parser.parse(xmlFile, account.handler);
}catch(IOException e){

e.printStackTrace(System.out);
System.exit(1);
}catch(SAXException e){

e.printStackTrace(System.out);
System.exit(1);
}

if(account.login.compareTo(l) == 0 && account.password.compareTo(pass) == 0)
return account;
else
return null;

}

/** Creates a new instance of AccountUtente */
AccountUtente(String l) {

login = "";
handler = new AccountSAXHandler(l);
}

/**
* Classe che risponde agli eventi del parser SAX per
* prelevare le informazioni rilevanti dal file XML.
*/
class AccountSAXHandler extends DefaultHandler {

String l; //Login dell'account da cercare
String buff; //Buffer utilizzato per prelevare il contenuto degli elementi
AccountMail amAux; //AccountMail ausiliario utilizzato durante la lettura dal file

public AccountSAXHandler(String log){

l = log;
}

public void startDocument(){

if(DEBUG)
System.out.println("AccountUtente{AccountSAXHandler.startDocument()}");
}

public void endDocument(){

if(DEBUG)
System.out.println("AccountUtente{AccountSAXHandler.endDocument()}");
}

public void startElement(String uri, String localName, String qName, Attributes attr){

buff = "";

if(qName.compareTo("mailAccount") == 0){

amAux = new AccountMail();

//Valore di "ssl"
if(attr.getValue("ssl").compareTo("true") == 0)
amAux.setSSL(true);
else
amAux.setSSL(false);

//Valore di "deleteMail"
if(attr.getValue("deleteMail").compareTo("true") == 0)
amAux.setDeleteMail(true);
else
amAux.setDeleteMail(false);
}

if(DEBUG)
System.out.println("AccountUtente{AccountSAXHandler.startElement()}: <" + qName + ">");
}

public void endElement(String uri, String localName, String qName){

if(qName.compareTo("login") == 0 && buff.compareTo(l) == 0) //

login = buff;
else if(qName.compareTo("password") == 0 && login.compareTo("") != 0){

password = buff;
}else if(qName.compareTo("nome") == 0 && login.compareTo("") != 0){

nome = buff;
}else if(qName.compareTo("cognome") == 0 && login.compareTo("") != 0){

cognome = buff;
}else if(qName.compareTo("mailHost") == 0 && login.compareTo("") != 0){

amAux.setHost(buff);
}else if(qName.compareTo("mailLogin") == 0 && login.compareTo("") != 0){

amAux.setLogin(buff);
}else if(qName.compareTo("mailPassword") == 0 && login.compareTo("") != 0){

amAux.setPassword(buff);
}else if(qName.compareTo("mailAccount") == 0 && login.compareTo("") != 0){

accounts.add(amAux);
}

if(DEBUG)
System.out.println("AccountUtente{AccountSAXHandler.endElement()}: </" + qName + ">");
}

public void characters(char[] ch, int start, int leng){

buff += new String(ch, start, leng);
}

public void warning(SAXParseException spe){

System.out.println("Warning alla linea " + spe.getLineNumber());
System.out.println(spe.getMessage());
}

public void fatalError(SAXParseException spe) throws SAXException{

System.out.println("FatalError alla linea " + spe.getLineNumber());
System.out.println(spe.getMessage());
throw spe;
}
}
}


------------------
Come si vede dal commento utilizzo un metodo statico per istanziare la classe e non il costruttore in modo da non istanziarla se non c'è l'account richiesto.

H E L P
__________________
/***
* Nulla è impossibile per chi non deve farlo
***/
Icedguardian è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2003, 09:01   #4
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5705
a me funziona !

ho preso il tuo codice e tolto i riferimenti a classi che non avevo e cicla correttamente su tutto il file xml.
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2003, 09:05   #5
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5705
sei sicuro che quando chiami:

Codice:
else if(qName.compareTo("mailHost") == 0 && login.compareTo("") != 0){

amAux.setHost(buff);
}else if(qName.compareTo("mailLogin") == 0 && login.compareTo("") != 0){

amAux.setLogin(buff);
}else if(qName.compareTo("mailPassword") == 0 && login.compareTo("") != 0){

amAux.setPassword(buff);
amAux sia istanziato??
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2003, 10:26   #6
Icedguardian
Member
 
Iscritto dal: May 2003
Messaggi: 283
Dovrebbe
adesso controllo, spero sia questo il prob.
__________________
/***
* Nulla è impossibile per chi non deve farlo
***/
Icedguardian è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2003, 11:26   #7
Icedguardian
Member
 
Iscritto dal: May 2003
Messaggi: 283
Scusate sono un idiota

Il problema era che non avevo creato la LinkedList quindi quando facevo l'add(amAux) lui giustamente si lamentava.

__________________
/***
* Nulla è impossibile per chi non deve farlo
***/
Icedguardian è offline   Rispondi citando il messaggio o parte di esso
Old 06-08-2003, 11:53   #8
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5705
infatti il problema doveva essere in qualcuna delle righe che avevo commentato per compilare
kingv è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


La rivoluzione dei dati in tempo reale è in arrivo. Un assaggio a Confluent Current 2025 La rivoluzione dei dati in tempo reale è ...
SAP Sapphire 2025: con Joule l'intelligenza artificiale guida app, dati e decisioni SAP Sapphire 2025: con Joule l'intelligenza arti...
Dalle radio a transistor ai Micro LED: il viaggio di Hisense da Qingdao al mondo intero Dalle radio a transistor ai Micro LED: il viaggi...
Meglio un MacBook o un PC portatile con Windows, oggi? Scenari, dubbi e qualche certezza Meglio un MacBook o un PC portatile con Windows,...
realme GT7: un "flaghsip killer" concreto! La recensione realme GT7: un "flaghsip killer" concr...
Il futuro degli aerei elettrici passa pe...
Sentenza blocca i dazi di Trump: "I...
Xiaomi SU7 è super popolare nei m...
AMAZFIT Active 2 a 94€ e tutti gli altri...
Smartphone con super batteria: Realme pr...
L'IA supererà Bitcoin: consumi en...
E-tattoo: arriva il tatuaggio elettronic...
GreenMindAI Hackathon Catania: annunciat...
DeepSeek R1 si aggiorna: l'IA cinese ade...
Torna in offerta il portatile Lenovo con...
Windows 11: problemi di avvio dopo l'upd...
Nothing Phone 3: il teaser ufficiale con...
GeForce NOW sbarca su Steam Deck: arriva...
Instagram supporta adesso il formato 3:4...
Perplexity Labs: perché usare la ...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:12.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v