Visualizzazione dei risultati da 1 a 10 su 12

Hybrid View

  1. #1
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Pippozzo Visualizza il messaggio
    Ora sono riuscito ad aggangiare l'allegato tramite un handler (DataSource), e ottenuto un inputstream da quest'ultimo per poterlo leggere. Mi chiedo, come posso adesso scrivere quanto letto su un documento che sia un pdf ??
    Se sei riuscito ad ottenere un input-stream per leggere quell'allegato, ti basta riversare tutti i byte pari-pari su un file con estensione .pdf. Se lo stream è un PDF .... il file sarà un PDF!

    P.S. hai parlato di codifica base64Binary ... chiaramente, visto che il messaggio è XML (quindi testo) e non può contenere dati binari puri. Non so cosa hai usato in termini di API/librerie per gestire il servizio SOAP ... devi solo vedere se la decodifica base64 è a tuo carico oppure è fatta a monte.
    Ultima modifica di andbin; 08-04-2014 a 14:18
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    48
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se sei riuscito ad ottenere un input-stream per leggere quell'allegato, ti basta riversare tutti i byte pari-pari su un file con estensione .pdf. Se lo stream è un PDF .... il file sarà un PDF!

    P.S. hai parlato di codifica base64Binary ... chiaramente, visto che il messaggio è XML (quindi testo) e non può contenere dati binari puri. Non so cosa hai usato in termini di API/librerie per gestire il servizio SOAP ... devi solo vedere se la decodifica base64 è a tuo carico oppure è fatta a monte.
    Ciao, grazie per la risposta. L'allegato che la risposta SOAP contiene è codificato in base64 (come specificato anche nel wsdl : <wsdlart type="xsd:base64Binary" name="pdfDocument">, nella sezione relativa ai messaggio di risposta del web service), indi per cui la devodifica è a mio carico. Secondo te va bene se opero così :

    codice:
    DataHandler handler =pdfDocument.value;
    DataSource dataSource = handler.getDataSource();
    //Ottengo un InputStream dal datasource
            InputStream inputStream = dataSource.getInputStream();
            
            InputStream is = MimeUtility.decode(inputStream,"base64" ); //decodifico il flusso
            FileWriter w=new FileWriter(dataSource.getName());
            BufferedWriter bw = new BufferedWriter (w);
            //Leggo l'inputStream decodificato
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader reader = new BufferedReader(isr);
            String line="";
            
            //Operazione di lettura
            while((line=reader.readLine())!=null)    {
                bw.write(line);
                bw.write ('\n');
                bw.flush();
            }

    Grazie
    Ultima modifica di LeleFT; 09-04-2014 a 08:42 Motivo: Aggiunti i tag CODE

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Pippozzo Visualizza il messaggio
    Secondo te va bene se opero così :

    codice:
            InputStream inputStream = dataSource.getInputStream();
            
            InputStream is = MimeUtility.decode(inputStream,"base64" ); //decodifico il flusso
            FileWriter w=new FileWriter(dataSource.getName());
            BufferedWriter bw = new BufferedWriter (w);
            //Leggo l'inputStream decodificato
            InputStreamReader isr = new InputStreamReader(is);
            BufferedReader reader = new BufferedReader(isr);
            String line="";
            
            //Operazione di lettura
            while((line=reader.readLine())!=null)    {
                bw.write(line);
                bw.write ('\n');
                bw.flush();
            }
    No assolutamente, il PDF è un file "binario", quindi non devi leggere "caratteri" o "linee". Usa FileOutputStream e leggi/scrivi a blocchi di byte sfruttando un byte[] di "buffer" di dimensione scelta da te (es. 1024).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    48
    Quote Originariamente inviata da andbin Visualizza il messaggio
    No assolutamente, il PDF è un file "binario", quindi non devi leggere "caratteri" o "linee". Usa FileOutputStream e leggi/scrivi a blocchi di byte sfruttando un byte[] di "buffer" di dimensione scelta da te (es. 1024).
    Rivedendo meglio la libreria che uso : javax.activation, potrei fare così :

    DataHandler handler =pdfDocument.value;
    DataSource dataSource = handler.getDataSource();
    File f = new File(dataSource.getName());
    FileOutputStream w =new FileOutputStream (f);
    handler.writeTo(w);

    dove il metodo writeTo retrieves the InputStream and copies the bytes from the InputStream to the OutputStream passed in.

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Pippozzo Visualizza il messaggio
    FileOutputStream w =new FileOutputStream (f);
    handler.writeTo(w);
    Se scrive i byte "crudi" dello stream dell'allegato (e non la codifica base64), allora è ok. Ricordati solo di fare il close di FileOutputStream, perché writeTo sicuramente non lo fa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    48
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Se scrive i byte "crudi" dello stream dell'allegato (e non la codifica base64), allora è ok. Ricordati solo di fare il close di FileOutputStream, perché writeTo sicuramente non lo fa.
    Ok, perfetto allora..ti ringrazio, sei stato molto gentile

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    48
    Quote Originariamente inviata da Pippozzo Visualizza il messaggio
    Rivedendo meglio la libreria che uso : javax.activation, potrei fare così :

    DataHandler handler =pdfDocument.value;
    DataSource dataSource = handler.getDataSource();
    File f = new File(dataSource.getName());
    FileOutputStream w =new FileOutputStream (f);
    handler.writeTo(w);

    dove il metodo writeTo retrieves the InputStream and copies the bytes from the InputStream to the OutputStream passed in.
    perchè pdfDocument.value è null ??
    cioè è il pdf che mi ritorna il servizio, ma è sempre null ? C'è qualcosa che sbaglio? non riesco a capire

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Pippozzo Visualizza il messaggio
    perchè pdfDocument.value è null ??
    Cos'è l'oggetto pdfDocument?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    48
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Cos'è l'oggetto pdfDocument?
    è un oggetto di tipo com.ibm.ws.webservices.engine.types.holders.DataHa ndlerHolder, mentre pdfDocument.value ritorna l'oggetto DataHandler da cui poi dovrei stampare il pdf..

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.