Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    48

    Java Application Client per Web Service

    buongiorno a tutti, chiedo gentilmente il vostro parere/aiuto. In pratica, sto sviluppando un application client java per un web service che è già stato implementato. Trattandosi di un web service, si usa la comunicazione col protocollo SOAP ovviamente. Tra i vari servizi messi a disposizione dal web service, ce n'è uno che nel messaggio soap di risposta allega anche un oggetto <mime:content part="pdfDocument" type="application/pdf"> codificato in base64Binary, in pratica mi ritorna un allegato che è un pdf. 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 ??
    Grazie a tutti

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Java ha un forum dedicato.

    Sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  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
    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

  4. #4
    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

  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
    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

  6. #6
    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.

  7. #7
    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

  8. #8
    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

  9. #9
    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

  10. #10
    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

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.