Visualizzazione dei risultati da 1 a 10 su 14

Hybrid View

  1. #1
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Essendo lì l'eccezione di NullPointerException innanzitutto vuol dire che document è null. Se document è null, è perché il build(file) evidentemente è fallito lanciando una eccezione (che tu sì, hai catturato ma senza far "reagire" in modo più corretto e pertanto prosegue nel codice) quindi document è rimasto appunto a null.

    Perché il build fallisce .... presumibilmente la specifica del file non è corretta/appropriata.


    P.S. dal e.printStackTrace(); allora dovresti avere la stampa anche di un altro stack-trace. Guarda quello.
    la specifica del file dovrei farla rispetto alla cartella dove è contenuto nel mio pc?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da thedoctor89 Visualizza il messaggio
    la specifica del file dovrei farla rispetto alla cartella dove è contenuto nel mio pc?
    Ehm ... allora, nelle web application le cose vanno un po' diversamente per quanto riguarda i riferimenti ai file.
    - mettere un path "relativo" (alla directory "corrente") nel sorgente non va bene, quale sia la directory corrente dipende dall'application server e da come viene avviato (potresti averne il controllo o no). Potrebbe essere la directory di installazione del server o poco più sotto ma in ogni caso è altamente improbabile che sia una directory utile per una o più applicazioni.
    - mettere path "assoluti" nel sorgente non va mai bene, qualunque sia il tipo di applicazione.

    Se i file da rintracciare e leggere fanno parte "fissi" della webapp, le soluzioni sono almeno 2:

    1) Usare il concetto delle risorse che vengono cercate lungo il classpath.

    URL fileUrl = UnaTuaClasse.class.getResource("documento.xml");
    oppure
    InputStream fileStream = UnaTuaClasse.class.getResourceAsStream("documento. xml");

    documento.xml nell'esempio sta nello stesso package di UnaTuaClasse. Nota: SAXBuilder ha i build() sia con URL che con InputStream, vedi suo javadoc.

    2) Usare i getResource/getResourceAsStream di ServletContext. Questi metodi non usano i concetti del classloader. La specifica del file deve iniziare con "/" che è riferito alla context-root della applicazione.

    ServletContext sc = .....
    URL fileUrl = sc.getResource("/WEB-INF/myfiles/documento.xml");
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ehm ... allora, nelle web application le cose vanno un po' diversamente per quanto riguarda i riferimenti ai file.
    - mettere un path "relativo" (alla directory "corrente") nel sorgente non va bene, quale sia la directory corrente dipende dall'application server e da come viene avviato (potresti averne il controllo o no). Potrebbe essere la directory di installazione del server o poco più sotto ma in ogni caso è altamente improbabile che sia una directory utile per una o più applicazioni.
    - mettere path "assoluti" nel sorgente non va mai bene, qualunque sia il tipo di applicazione.

    Se i file da rintracciare e leggere fanno parte "fissi" della webapp, le soluzioni sono almeno 2:

    1) Usare il concetto delle risorse che vengono cercate lungo il classpath.

    URL fileUrl = UnaTuaClasse.class.getResource("documento.xml");
    oppure
    InputStream fileStream = UnaTuaClasse.class.getResourceAsStream("documento. xml");

    documento.xml nell'esempio sta nello stesso package di UnaTuaClasse. Nota: SAXBuilder ha i build() sia con URL che con InputStream, vedi suo javadoc.

    2) Usare i getResource/getResourceAsStream di ServletContext. Questi metodi non usano i concetti del classloader. La specifica del file deve iniziare con "/" che è riferito alla context-root della applicazione.

    ServletContext sc = .....
    URL fileUrl = sc.getResource("/WEB-INF/myfiles/documento.xml");
    posso usare servletContext ed i relativi metodi anche se sono all'internno di una classe e non di una servlet?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da thedoctor89 Visualizza il messaggio
    posso usare servletContext ed i relativi metodi anche se sono all'internno di una classe e non di una servlet?
    Certo, basta che la classe possa ricevere (in qualunque modo, almeno che sia "pulito") il riferimento all'oggetto ServletContext (che è uno solo per una istanza della webapp su una istanza della VM).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Certo, basta che la classe possa ricevere (in qualunque modo, almeno che sia "pulito") il riferimento all'oggetto ServletContext (che è uno solo per una istanza della webapp su una istanza della VM).
    mmmmh

  6. #6
    ho complicato un po' le cose..
    XMLManager:
    codice:
    package it.unirc.bd2.juventusclubdoc.util;
    
    import java.io.File;
    import java.io.IOException;
    import java.net.URISyntaxException;
    import java.net.URL;
    import java.util.Iterator;
    
    import org.jdom2.Content;
    import org.jdom2.Document;
    import org.jdom2.Element;
    import org.jdom2.JDOMException;
    import org.jdom2.input.SAXBuilder;
    
    
    
    public class XMLManager {
        
        
        // si potrebbe rendere più efficiente evitando il parsin ogni volta che si chiede il testo
        public static String getText(String key, String country) throws URISyntaxException {
            
            //potrei passare la variabile path direttamente qui, non uso l'indirizzo!!! devo usare la variabile path!!
            
            //se country = it fai così (Gestione country in base alla lingua)
            
            
            //gestione country
            
        
            URL url=XMLManager.class.getResource("Data_"+country+".xml");
            File file=new File(url.toURI());
            // creo l'oggetto di tipo file che è l'input
            
            //if(!file.exists())  // se non esiste creo file 
                //file= new File("c:/Data_IT.xml");
                
                //file = new File("src/it/unirc/bd2/xml/Data_"+country+".xml");
            
            
            SAXBuilder builder= new SAXBuilder(); // oggetto che si occuperà del parsing del documento creato
            Document document =null; //l'output
            
            try {
                document=builder.build(file);
            } catch (JDOMException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
            Element root=document.getRootElement();
            
            Content c;
            
            Iterator<Content> discendenti=document.getDescendants();
              //document.getDescendants(); // mi restituisce un 'iteratore di contenuti
              
              while (discendenti.hasNext()){   // serve a navigare sul documento xml quando non conosciamo la struttura
                  c=discendenti.next();
                  if (c.getCType().equals(Content.CType.Element)){ //verifico che ciò che cerco è un element
                      Element e=(Element) c;
                      if (e.getName().equals(key))
                      return (e.getText());
                      
                  }
              }
            
            
            
            
            
            
            
            
            
            return "";
        }
    
    }
    index.jsp
    codice:
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
        <%@ page import="it.unirc.bd2.juventusclubdoc.util.XMLManager"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>JuventusClubDOC</title>
    <link href="CSS/style.css" rel="stylesheet" type="text/css" />
    
    </head>
    <body>
    
    <div id="header">
        </div>
    
    <div id="container">
        
        
        <% String language=request.getParameter("language");
        if("".equals(language))
            language="IT";
        
        %>
        <div id="middle">
        <ul id="menu">
        <li><a href="index.jsp">Home</a></li>
        
        <li>
            <a href="tesseramento.jsp"> <% out.print(XMLManager.getText("item3",language));%> </a>
            <ul>
                <li>
                    <a href="#">Juventus-Milan (C.Italia)</a>
                    <ul>
                        <li>
                            <a href="#">Biglietti</a>        
                                                    
                        </li>
                        <li>
                            <a href="#">TerzoTempoDOC</a>
                            <                        
                        </li>
                        <li>
                            <a href="#">WalkAbout</a>
                                                        
                        </li>
                    </ul>                    
                </li>
                <li>
                    <a href="#">Juventus-Galatasaray</a>
                    <ul>
                        <li>
                            <a href="#">Biglietti</a>
                                                        
                        </li>
                        <li>
                            <a href="#">TerzoTempoDOC</a>
                                                        
                        </li>
                        <li>
                            <a href="#">WalkAbout</a>
                                                        
                        </li>
                    </ul>                    
                </li>
                <li>
                    <a href="#">Juventus-Parma</a>
                    <ul>
                        <li>
                            <a href="#">Biglietti</a>
                                                    
                        </li>
                        <li>
                            <a href="#">TerzoTempoDOC</a>
                                                    
                        </li>
                        <li>
                            <a href="#">WalkAbout</a>
                                                    
                        </li>
                    </ul>                    
                </li>
            </ul>        
        </li>
        <li>
            <a href="biglietti&abbonamenti.jsp"><% out.print(XMLManager.getText("item4",request.getParameter("language")));%></a>
                   <ul>
                <li>
                    <a href="Milan.html">Juventus-Milan (C.Italia)</a>
                                        
                </li>
                <li>
                    <a href="#">Lazio-Juventus</a>
                                        
                </li>
                    
            </ul>        
        </li>    
        </li>
        <li>
            <a href="trasferte.jsp"><% out.print(XMLManager.getText("item5",request.getParameter("language")));%></a>    
        </li>
        <li>
            <a href="contatti.jsp"><% out.print(XMLManager.getText("item6",request.getParameter("language")));%></a>    
        </li>
        <li>
            <a href="login.jsp">Login</a>    
        </li>
    </ul>
        
        <div id="spazio">
           </div>
           <a href="index.jsp?language=IT"><img src="img/bandiera_italiana.jpg" ></a>  <a href="index.jsp?language=ENG"><img src="img/bandinglese.gif" ></a> 
           <div id="tabella1">
           <div align="center"> 
           <titolo>
           <% out.print(XMLManager.getText("item1",request.getParameter("language")));%>
           </titolo>
           </div>
           </div>
           <div id="spazio">
           </div>
           
           <img width="168" height="144" style="cursor: -moz-zoom-in;" src="img/scirea.jpg" onclick="this.width=960;this.height=603;" ondblclick="this.width=168;this.height=144;" title="cena" alt="testo alternativo" />
           <img width="168" height="144" style="cursor: -moz-zoom-in;" src="img/coppa.jpg" onclick="this.width=960;this.height=640;" ondblclick="this.width=168;this.height=144;" title="scudetto" alt="testo alternativo" />
           <img width="168" height="144" style="cursor: -moz-zoom-in;" src="img/soci.jpg" onclick="this.width=800;this.height=800;" ondblclick="this.width=168;this.height=144;" title="soci" alt="testo alternativo" />
           <img width="168" height="144" style="cursor: -moz-zoom-in;" src="img/risto.jpg" onclick="this.width=960;this.height=720;" ondblclick="this.width=168;this.height=144;" title="festeggiamenti" alt="testo alternativo" />
           <img width="168" height="144" style="cursor: -moz-zoom-in;" src="img/32.jpg" onclick="this.width=720;this.height=960;" ondblclick="this.width=168;this.height=144;" title="maglia celebrativa" alt="testo alternativo" />
           
           
           
           
           
        
           <div id="tabella1">
           
                 <descrizione>
                 <% out.print(XMLManager.getText("item2",request.getParameter("language")));%>
                  </descrizione>
       
        
        </div>
        
        
           <img width="168" height="144" style="cursor: -moz-zoom-in;" src="img/cena.jpg" onclick="this.width=960;this.height=640;" ondblclick="this.width=168;this.height=144;" title="cena" alt="testo alternativo" />
           <img width="168" height="144" style="cursor: -moz-zoom-in;" src="img/arena.jpg" onclick="this.width=960;this.height=720;" ondblclick="this.width=168;this.height=144;" title="arena" alt="testo alternativo" />
           <img width="168" height="144" style="cursor: -moz-zoom-in;" src="img/bandiere.jpg" onclick="this.width=960;this.height=720;" ondblclick="this.width=168;this.height=144;" title="bandiere" alt="testo alternativo" />
           <img width="168" height="144" style="cursor: -moz-zoom-in;" src="img/barnabeu.jpg" onclick="this.width=960;this.height=640;" ondblclick="this.width=168;this.height=144;" title="barnabeu" alt="testo alternativo" />
           <img width="168" height="144" style="cursor: -moz-zoom-in;" src="img/ita.jpg" onclick="this.width=800;this.height=597;" ondblclick="this.width=168;this.height=144;" title="curva" alt="testo alternativo" />
           
        
    
    
    
        
    </div>    
    </body>
    </html>

    type Exception report
    message java.lang.NullPointerException
    description The server encountered an internal error that prevented it from fulfilling this request.
    exception
    org.apache.jasper.JasperException: java.lang.NullPointerException
    org.apache.jasper.servlet.JspServletWrapper.handle JspException(JspServletWrapper.java:549)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:470)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:727)
    org.apache.tomcat.websocket.server.WsFilter.doFilt er(WsFilter.java:52)
    root cause
    java.lang.NullPointerException
    it.unirc.bd2.juventusclubdoc.util.XMLManager.getTe xt(XMLManager.java:32)
    org.apache.jsp.index_jsp._jspService(index_jsp.jav a:94)
    org.apache.jasper.runtime.HttpJspBase.service(Http JspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:727)
    org.apache.jasper.servlet.JspServletWrapper.servic e(JspServletWrapper.java:432)
    org.apache.jasper.servlet.JspServlet.serviceJspFil e(JspServlet.java:390)
    org.apache.jasper.servlet.JspServlet.service(JspSe rvlet.java:334)
    javax.servlet.http.HttpServlet.service(HttpServlet .java:727)
    org.apache.tomcat.websocket.server.WsFilter.doFilt er(WsFilter.java:52)
    note The full stack trace of the root cause is available in the Apache Tomcat/7.0.52 logs.

    il problema è che se io vado manualmente a scrivere IT per ottenere l'url, all'interno della classe xmlmanager,funziona tutto e riesco a fare il passaggio dalla lingua inglese ad italiano senza problemi
    se riavvio eclipse e mi ricompare sempre questo errore
    come mai?

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da thedoctor89 Visualizza il messaggio
    codice:
            URL url=XMLManager.class.getResource("Data_"+country+".xml");
            File file=new File(url.toURI());    // NO!
            
                document=builder.build(file);
    Innanzitutto, l'ho precisato prima, c'è un build() che accetta URL. Se hai un URL e la API (SAXBuilder) accetta URL, usa quello, non lanciarti mai in conversioni che potrebbero non essere appropriate in tutti i contesti.

    E comunque se il punto incriminato da

    java.lang.NullPointerException
    it.unirc.bd2.juventusclubdoc.util.XMLManager.getTe xt(XMLManager.java:32)

    è File file=new File(url.toURI());

    allora significa che url è null, dovuto alla risorsa che non è stata trovata. Per come è specificato, Data_xyz.xml deve trovarsi nello stesso package della classe XMLManager. Ovvero, nella directory dove viene creato XMLManager.class deve esserci quel file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    il file xml si trova nello stesso package di xmlmanager

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.