Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181

    stranissimo nullpointerexception...

    codice:
    exception
    
    org.apache.jasper.JasperException: java.lang.NullPointerException
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:492)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:422)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    
    root cause
    
    java.lang.NullPointerException
    	com.itextpdf.text.pdf.XfaForm.findFieldName(XfaForm.java:275)
    	com.itextpdf.text.pdf.AcroFields.setField(AcroFields.java:1310)
    	com.itextpdf.text.pdf.AcroFields.setField(AcroFields.java:1288)
    	stampaPDF.GestorePdf.stampaFoglio(GestorePdf.java:45)
    	org.apache.jsp.foglio.stampa_jsp._jspService(stampa_jsp.java:126)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:376)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    codice:
    public boolean stampaFoglio(Persona p, String nomeFilePdf) throws IOException, DocumentException, ClassNotFoundException, SQLException{
    		boolean stato=false;
    		PdfReader reader = new PdfReader("C:/PDF/"+nomeFilePdf);
    		//creo il nome del file di output
    		nomeFile="Foglio_"+p.getNome()+p.getCognome()+"_id_"+p.getCodice()+".pdf";
    		System.out.println(nomeFile);
    		PdfStamper stamp = new PdfStamper(reader, new FileOutputStream(nomeFile));
    		//questo oggetto gestisce i form del pdf vuoto
    	    AcroFields form = stamp.getAcroFields();
    
    	    
    	    form.setField("data", p.getData());
                form.setField("cognome",p.getCognome() );
    	    form.setField("nome",p.getNome() );
    	    form.setField("sesso",p.getSesso() );
    	    form.setField("dataDiNascita",p.getDataDiNascita() );
    	    form.setField("luogoDiNascita",p.getLuogoDiNascita() );
    	    form.setField("indirizzo",p.getIndirizzo() );
    	    form.setField("comune",p.getComune() );
    	    form.setField("provincia",p.getProvincia() );
    	    form.setField("statoCivile",p.getStatoCivile() );
    	   
    		//indico che non e più modificabile
    		stamp.setFormFlattening(true);
    	    stamp.close();
    	    stato=true;
    		return stato;
    
    	}
    l'eccezione da quello che ho capito riguarda la riga 45: stampaPDF.GestorePdf.stampaFoglio(GestorePdf.java: 45)

    che sarebbe questa:

    form.setField("data", p.getData());

    Ho controllato e p.getData() non è null

  2. #2
    Non ho mai utilizzato iText, ma evidentemente il metodo setField imposta il valore di un campo il cui nome è passato come parametro, nel tuo caso immagino che cerchi di impostare il campo di nome "data" con il valore contenuto nell'attributo data dell'istanza p di Persona

    codice:
    form.setField("data", p.getData());
    suppongo che l'attributo "data", così come gli altri, che tenti di impostare debba essere dichiarato da qualche parte, magari in qualche file di configurazione o simile. Quindi l'eccezione che ricevi non va intesa nel senso che p.getData() è null, ma piuttosto che il campo di nome "data" che tenti di valorizzare non è definito da nessuna parte.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    in pratica ho creato un file pdf con un form dinamico.

    Quel "data" sarebbe il nome del textfield del form presente nel file pdf..

  4. #4
    Quello che leggo io nello stacktrace dell'eccezione:

    codice:
    java.lang.NullPointerException
    	com.itextpdf.text.pdf.XfaForm.findFieldName(XfaForm.java:275)
    	com.itextpdf.text.pdf.AcroFields.setField(AcroFields.java:1310)
    	com.itextpdf.text.pdf.AcroFields.setField(AcroFields.java:1288)
    	stampaPDF.GestorePdf.stampaFoglio(GestorePdf.java:45)
    è che viene invocato il metodo setField() da cui deduco che l'attributo form non è null. Il metodo setField() si trova nella classe AcroFields che probabilmente ne effettua l'overloading in quanto vedo due chiamate allo stesso metodo con righe differenti. Infine, il metodo che restituisce la NullPointerException è findFieldName() della classe XfaForm invocata all'interno del metodo setField(). Non avendo a disposizione il codice sorgente posso però dedurre dal nome del metodo che esso cerchi di recuperare un campo con un particolare nome, che dal codice da te postato dovrebbe essere "data". Siccome tale metodo va in eccezione intuisco che il campo in questione non esiste.
    In conclusione il nome del textfield del form presente nel file pdf che dovrebbe essere "data", da quanto dici, o non esiste, o non si chiama così oppure per un qualche motivo non è recuperabile.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    grazie mille, io purtroppo non ho ancora la capacità di leggere bene lo stacktrace

    ho verificato e sia form, che data che stamp NON sono null.

    Quindi, per capire, il metodo che restituisce la NullPointerException è sempre quello che viene indicato la riga successiva alla riga: java.lang.NullPointerException ??

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    come hai controllato?
    Soprattutto quando fai il form da itext, hai associato il campo giusto?
    Elimina al momento la chiamata a jasper report e debugga: il problema come ti diceva satifal molto probabilmente riguarda il collegamento ad un campo non esistente, quindi controlla che tutti i campi sono ben valorizzati PRIMA di fare la chiamata a jasper report (non con una println a video però).

    Se questo controllo lo passi, controlla i nomi alle variabili e i nomi dei metodi che hai usato, in modo da essere sicuro che vai a prendere quello giusto (e non scrivi getdata() al posto di getData()).

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    grazie Valia

    ho risolto poco fa, avevo salvato in un formato errato il pdf..

    i controlli li avevo fatti con un if:

    if (stamp == null) system.out.println("null")

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    ora avrei un altro problema a dire il vero...ho creato una pagina dove viene generato dinamicamente un link per il file pdf creato.

    Il link funziona con tutti i browser tranne che con firefox! Da quello che ho capito, per motivi di sicurezza...

    http://forums.mozillazine.org/viewtopic.php?f=9&t=1730

    sapete se c'è un modo per bypassare il controllo di sicurezza che fa firefox?

    EDIT: ho avuto un abbaglio! NOn funziona neanche con gli altri browser

    il link è questo: file:///C:/CERTIFICATI/FOGLI/Foglio_id_1.pdf

    Se lo incollo sulla barra degli indirizi fuziona senza problemi...

    lo genero cosi:

    stampa foglio

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    perché accedi a c: da una pagina web.
    Una pagina web accede a tutto ciò che c'è nel suo context a meno che non si specifica altrimenti (emettendo un bel certificato che costa)

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2010
    Messaggi
    181
    io sto realizzando un sistema informativo che lavora in locale, verrà utilizzato al massimo da qualche computer collegato in lan. Vabbè ma quindi se creo una cartella all'interno di WebContent riesco a risolvere?

    EDIT: sto provando ma mi sto confondendo un po con i link..

    in pratica dovrei modificare questa riga:

    PdfReader reader = new PdfReader("C:/PDF/"+nomeFilePdf);

    ho provato cosi ma non trova il file:

    PdfReader reader = new PdfReader("../PDF/"+nomeFilePdf);

    ora mi trovo in WebContent/foglio/

    forse PdfReader legge solo file dal disco con indirizzi del tipo: C:\ ecc

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.