Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    30

    [JAVA] Modifica di un errore attraverso try-catch

    Buongiorno a tutti,
    sto cercando di catturare attraverso un blocco try-catch un eccezione in java, in modo tale che se mi viene generata l'eccezione il mio programma mi stampi un messaggio.
    Il problema sta che non riesco a catturarla nemmeno attraverso il try-catch e credo che il problema è che non dichiaro l'eccezione esatta.
    Vi mostro il pezzo di codice che ho fatto:
    ***************
    try{
    parser.parse(file);
    }catch (SAXException e){
    System.out.println(e);
    }catch (IOException e){
    System.err.println(e);
    }catch (Exception e){
    System.err.println(e);
    }
    *******************

    Per la generazione della particolare eccezione, ho modificato il mio documento XML in modo tale che in fase di parserig attraverso un XML Schema, mi venisse generato il seguente errore:

    **************
    [Error] InvoiceXML.xml:22:62: cvc-datatype-valid.1.2.1: '' is not a valid value for 'integer'.
    [Error] InvoiceXML.xml:22:62: cvc-attribute.3: The value '' of attribute 'CAB' on element 'BankingEnds' is not valid with respect to its type, 'integer'.
    ******************

    Come vedete, il parser funziona e mi dice che l'inizializzazione dell'attributo CAB è sbagliata, in quanto si aspetta uno zero invece di una stringa vuota="" (che vale solo per il tipo stringa).
    Io vorrei cambiare questo maledetto messaggio in inglese, e per farlo dovrei catturare l'eccezione giusta. So per certo che le eccezioni riportate nel codice sopra non vengono usate, allora la mia domanda è questa: quale eccezione devo usare? Come faccio a catturare un'eccezione e scrivere un messaggio personalizzato.
    Nella speranza che qualcuno mi possa rispondere, vi saluto e vi auguro buona giornata. Grazie
    DP

  2. #2
    gia dovrebbe essrere catturata nel blocco generico Exception, comunque
    dovrebbe essere qualcosa di simile a SaxParseException
    ► ☺ ◄

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    30

    hai ragione

    Si, è saxparsexception, ma all'interno del catch ho posto un
    system.out.println ("Prova"), ma nella console mi viene sempre visualizzato il messaggio in inglese. Come mai?
    Accipicchia che casino, non so più dove sbattere la testa.

  4. #4
    codice:
    try{
    parser.parse(file);
    }catch (Exception e){
    System.err.println("Errore");
    }
    E' strano , tu dovresti catturare l'errore anche con questo solo catch.
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    30

    Non so più

    Non so più dove sbattere la testa. Le ho provate tutte, eppure se continua a darmi l'errore in inglese significa che in quei catch non ci entrerà. Ma allora avendo un oggetto DOMPARSER come posso catturare l'eccezione? Se riuscissi a risolvere questa cosa sarei proprio ad un bel punto.
    Please help me
    DP

  6. #6
    Nelle API che tipo di eccezione è specificata per quel metodo parse??
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    30

    API

    Riguardo le APi del parser non c'è nulla che specifichi le eccezioni, infatti il metodo DOM per la visita di un XML Document si appoggia sulle eccezioni del SAX.
    Il SAX ha le seguenti eccezioni:

    SAXException
    SAXNotRecognizedException
    SAXNotSupportedException
    SAXParseException

    Questi sono gli unici metodi che mi permettono in SAX di catturare le eccezioni, ma mi sembra strano che io non possa catturare quel maledetto errore.
    Grazie ancora

  8. #8
    Di solito nelle api , reativamente ai metodi , viene segnalata l'eccezzione lanciata
    Prova a postare il codice completo
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2003
    Messaggi
    30

    Eccolo

    Ecco il codice. Il parser funziona correttamente ma come ti dicevo non riesco a catturare l'eccezione di un errore volontario.
    Che robe, è la prima volta che mi succede questa cosa.


    package ReaderXSD;

    import org.xml.sax.*;
    import org.apache.xerces.parsers.DOMParser;
    import org.w3c.dom.*;
    import org.xml.sax.SAXException;
    import java.io.IOException;


    public class ReadSchema {

    public ReadSchema(String file) {

    DOMParser parser=new DOMParser();

    try{
    parser.setFeature("http://xml.org/sax/features/validation",true);
    parser.setFeature("http://apache.org/xml/features/validation/schema",true);
    //parser.setFeature("http://apache.org/xml/features/nonvalidating/load-dtd-grammar",false);
    //parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd",false);
    //parser.setFeature("http://apache.org/xml/features/validation/schema-full-checking",true);
    //parser.setFeature("http://apache.org/xml/features/validation/schema/element-default",true);

    }catch (SAXNotRecognizedException e){
    System.err.println("lkfdlfkkfl");
    }catch (SAXNotSupportedException e){
    System.err.println("fdkfjdjfdkjfkfjdkfjdkfj");
    }

    try{
    parser.parse(file);
    }catch (SAXParseException e){
    System.out.println("Andrà");
    }catch (SAXException e){
    System.out.println("fdfd");
    }catch (IOException e){
    System.out.println("defdfdkl");
    }catch (Exception e){
    System.out.println("gfgfgkflgk");
    }
    Document doc =parser.getDocument();
    traverse(doc);
    }

    private void name_attribute(Node tag){
    for (int i=0; i<tag.getAttributes().getLength(); i++)
    {
    // Lettura del nome e del valore dell'attributo
    if (tag.getAttributes().item(i).getNodeValue()==""){
    System.out.println("Attributo: "+tag.getAttributes().item(i).getLocalName()+" = "+"''");
    }else{
    System.out.println("Attributo: "+tag.getAttributes().item(i).getLocalName()+" = "+ tag.getAttributes().item(i).getNodeValue());
    }
    }
    }
    //Procedura Traverse: permette di visitare il documento XML, visualizzandolo nella console.
    private void traverse (Node node){

    int type=node.getNodeType();
    if (type==Node.ELEMENT_NODE)

    System.out.println(node.getNodeName().toUpperCase( ));

    if (node.hasAttributes()== true)
    //System.out.println("TAG: "+node.getNodeName().toUpperCase());
    name_attribute(node);
    // RIcavo gli attributi del singolo nodo
    //AttrList att=node.getAttributes();

    NodeList children= node.getChildNodes();
    if (children!= null){
    int lun=children.getLength();
    for (int i=0; i<lun; i++)
    traverse (children.item(i));
    }
    }
    //Warning
    /*public void warning (SAXParseException e) throws SAXException
    {
    System.err.println("Warning: "+e);
    }

    //Error
    public void error (SAXParseException e) throws SAXException
    {
    System.err.println("Error: "+e);
    }

    //FatalError
    public void fatalError (SAXParseException e) throws SAXException
    {
    System.err.println("Fatal Error: "+e);
    }*/

    //Main
    public static void main(String[] args) throws Exception {
    ReadSchema read= new ReadSchema("http://localhost:8080/InvoiceXML.xml");
    }
    }


    Non so come ringraziarti per l'aiuto che mi stai dando. Gentilissimo. Grazie ancora.
    DP

  10. #10
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    Attenzione, la classe Error non è sottoclasse di Exception, per questo la clausola

    Codice PHP:
        catch(Exception e){

        } 
    non può catturare un Error.

    Per catturare un Error è necesario

    Codice PHP:
        catch(Error e){

        } 
    Nota che il catch(Error) non ti cattura le Exception perchè a sua volta Error non è superclase di Exception, quindi per catturare sia errori che eccezioni sono necessari entrambi i catch, oppure per catturarli entrambi:

    Codice PHP:
        catch(Throwable e){

        } 

    ciao.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.