java.io.OutputStream zu java.io.InputStream konvertieren

beta20

Top Contributor
Hallo,

wie schaffe ich es ein Objekt vom Typ: java.io_OutputStream in einen java.io.InputStream zu konvertieren?

Ich habe diesen Code, welcher ein PDF von einer Webseite erzeugt...
Hier bekomme ich einen Fehler (cannot cast Exception)
ByteArrayOutputStream buffer = (ByteArrayOutputStream) browserStream;

Java:
ExternalContext externalContext = facesContext.getExternalContext();
            String serverName = externalContext.getRequestServerName();
            String port = String.valueOf(externalContext.getRequestServerPort());
            String appName = externalContext.getRequestContextPath();
            String protocol = externalContext.getRequestScheme();
            String url = protocol + "://" + serverName + ":" + port + appName;

            HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
            response.reset();
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "inline; filename=\"" + "pdfTemplate.pdf" + "\"");

            OutputStream browserStream = response.getOutputStream();

            PdfRendererBuilder builder = new PdfRendererBuilder();
            XRLog.setLevel(XRLog.CSS_PARSE, Level.SEVERE);
            XRLog.setLoggingEnabled(false);
            
            builder.useFastMode();
            builder.withUri(new URL(url).toString());
            builder.toStream(browserStream);

            builder.run();
                           
            ByteArrayOutputStream buffer = (ByteArrayOutputStream) browserStream;
            byte[] bytes = buffer.toByteArray();
            InputStream inputStream = new ByteArrayInputStream(bytes);
            pdfFile = new DefaultStreamedContent(inputStream, "application/pdf");
 

NoName2

Mitglied
Du meinst doch bestimmt so etwas
Java:
	public static InputStream getOutput(InputStream is) throws IOException {
		try (BufferedInputStream bis = new BufferedInputStream(is)) {
			return new ByteArrayInputStream(bis.readAllBytes());
		}
	}

Von einem InputStream kann man nur Daten lesen, zu einem OutputStream kann man nur Daten schreiben.
 

NoName2

Mitglied
Geht nich:

Stichwörter zum Suchen: redirect, pipe... aber wie gesagt, zu einem OutputStream kannst du nur schreiben, umgekehrt ergäbe das keinen Sinn

Du kannst natürlich die zu schreibenden Byte woanders verarbeiten.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Du könntest mal folgendes probieren (Skizze!):
Java:
PipedOutputStream os = new PipedOutputStream();
PipedInputStream is = new PipedInputStream(os);

managedExecutorService.submit(() -> {
            PdfRendererBuilder builder = new PdfRendererBuilder();
            XRLog.setLevel(XRLog.CSS_PARSE, Level.SEVERE);
            XRLog.setLoggingEnabled(false);
           
            builder.useFastMode();
            builder.withUri(new URL(url).toString());
            builder.toStream(os);

            builder.run();
});

pdfFile = new DefaultStreamedContent(is, "application/pdf");
 

beta20

Top Contributor
danke, das sieht schon Mal gut aus, allerdings scheint das PDF keine Daten zu haben:
"stream must have data"

Wo übergebe ich dann:
OutputStream browserStream = response.getOutputStream();
 

beta20

Top Contributor
Aber dann fehlt mir doch das?

Java:
HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
response.reset();
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=\"" + "pdfTemplate.pdf" + "\"");
OutputStream browserStream = response.getOutputStream();

Aktuell bekomme ich wohl kein Content in das PDF.
Bekomme ebenso diese Meldung:

Error in streaming dynamic resource.: org.jboss.weld.contexts.ContextNotActiveException: WELD-001303: No active contexts for scope type javax.faces.view.ViewScoped
 

beta20

Top Contributor
leider nein. immer noch:
Nachricht: PDFDocument: stream must have data

Java:
PipedOutputStream os = new PipedOutputStream();
            PipedInputStream is = new PipedInputStream(os);

            managedExecutorService.submit(() -> {

                try {
                    PdfRendererBuilder builder = new PdfRendererBuilder();
                    XRLog.setLevel(XRLog.CSS_PARSE, Level.SEVERE);
                    XRLog.setLoggingEnabled(false);
                    builder.useFastMode();
                    builder.withUri(new URL(url).toString());
                    builder.toStream(os);
                    builder.run();

                    os.close();

                } catch (IOException e) {
                    LOGGER.error(ExceptionUtils.getFullStackTrace(e));
                }
            });

pdfFile = new DefaultStreamedContent(is, "application/pdf");
 

beta20

Top Contributor
Selbst wenn ich diesen Code ausführe, wird das PDF auch nicht mehr richtig generiert.

Java:
    ExternalContext externalContext = facesContext.getExternalContext();
            String serverName = externalContext.getRequestServerName();
            String port = String.valueOf(externalContext.getRequestServerPort());
            String appName = externalContext.getRequestContextPath();
            String protocol = externalContext.getRequestScheme();
            String url = protocol + "://" + serverName + ":" + port + appName + "/common/documentEditorPreview.xhtml"
                    + "?documentDesignerId=" + documentDesigner.getIdHash() + "&preview=true";

            HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
            response.reset();
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "inline; filename=\"" + "pdfTemplate.pdf" + "\"");

            OutputStream browserStream = response.getOutputStream();

            managedExecutorService.submit(() -> {

                try {
                    PdfRendererBuilder builder = new PdfRendererBuilder();
                    XRLog.setLevel(XRLog.CSS_PARSE, Level.SEVERE);
                    XRLog.setLoggingEnabled(false);

                    builder.useFastMode();
                    builder.withUri(new URL(url).toString());
                    builder.toStream(browserStream);

                    builder.run();
                    
                } catch (IOException e) {
                    LOGGER.error(ExceptionUtils.getFullStackTrace(e));
                }
            });


Hingegen, dieser Code geht:
Java:
    ExternalContext externalContext = facesContext.getExternalContext();
            String serverName = externalContext.getRequestServerName();
            String port = String.valueOf(externalContext.getRequestServerPort());
            String appName = externalContext.getRequestContextPath();
            String protocol = externalContext.getRequestScheme();
            String url = protocol + "://" + serverName + ":" + port + appName + "/common/documentEditorPreview.xhtml"
                    + "?documentDesignerId=" + documentDesigner.getIdHash() + "&preview=true";

            HttpServletResponse response = (HttpServletResponse) externalContext.getResponse();
            response.reset();
            response.setContentType("application/pdf");
            response.setHeader("Content-Disposition", "inline; filename=\"" + "pdfTemplate.pdf" + "\"");

            OutputStream browserStream = response.getOutputStream();

            PdfRendererBuilder builder = new PdfRendererBuilder();
            XRLog.setLevel(XRLog.CSS_PARSE, Level.SEVERE);
            XRLog.setLoggingEnabled(false);
            
            builder.useFastMode();
            builder.withUri(new URL(url).toString());
            builder.toStream(browserStream);
            
            builder.run();
            browserStream.close();

Das Problem besteht also leider weiterhin
 

mihe7

Top Contributor
Mal standalone probiert:
Java:
import java.util.concurrent.*;
import java.io.*;
import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;

public class Test
{

    public static void writePdf(OutputStream pos) {
        try(OutputStream os = pos) {
            PdfRendererBuilder builder = new PdfRendererBuilder();
            builder.useFastMode();
            builder.withUri("https://www.w3.org/");
            builder.toStream(os);
            builder.run();
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

    public static void main(String[] args) throws Exception {
        ExecutorService service = Executors.newFixedThreadPool(1);

        PipedOutputStream os = new PipedOutputStream();
        PipedInputStream is = new PipedInputStream(os);
        service.submit(() -> writePdf(os));
        service.shutdown();

        try(FileOutputStream fos = new FileOutputStream("test.pdf")) {
            is.transferTo(fos);
        }
    }
}

Funktioniert einwandfrei. Wenn ich allerdings eine Wikipedia-URL verwende, wird ein 0-byte-File ausgegeben.
 

beta20

Top Contributor
Ich habe nun das Objekt pdfFile + die Methode in ein @ApplicationScoped gepackt (nicht @ViewScoped).
Es scheint, dass das dann abschließend das Problem war.

Vielen Dank für die Hilfe
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H .java Dateien in Eclipse einbinden und ausführen Java Basics - Anfänger-Themen 1
onlyxlia Schlüsselworte Was meint man mit "einen Typ" in Java erstellen? Java Basics - Anfänger-Themen 2
O Java Kara geschweifte Klammern Java Basics - Anfänger-Themen 2
richis-fragen Mausrad logitech kann links und rechts klick wie in java abragen. Java Basics - Anfänger-Themen 15
XWing Java Klssenproblem Java Basics - Anfänger-Themen 4
R Umgebungsvariable java -cp gibt immer Java-Hilfe... Java Basics - Anfänger-Themen 3
farbenlos Csv Datei in Java einlesen Java Basics - Anfänger-Themen 18
F TableModelListener: java.lang.ArrayIndexOutOfBoundsException: 132 Java Basics - Anfänger-Themen 3
G Java 8 - Support-Ende Java Basics - Anfänger-Themen 7
T Java Weihnachtsbaum + Rahmen Java Basics - Anfänger-Themen 1
N Will mit Java anfangen Java Basics - Anfänger-Themen 13
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
M Java Iterator Verständnisfrage Java Basics - Anfänger-Themen 6
M Java Mail Programm Java Basics - Anfänger-Themen 4
Sniper1000 Java 391 für Windows Java Basics - Anfänger-Themen 37
J Java long- in int-Variable umwandeln Java Basics - Anfänger-Themen 6
JaZuDemNo Java im Studium Java Basics - Anfänger-Themen 7
E Java Programm zur anzeige, ob Winter- oder Sommerzeit herrscht Java Basics - Anfänger-Themen 62
I QR code in Java selber generieren Java Basics - Anfänger-Themen 5
V Java-Ausnahmebehandlung: Behandlung geprüfter Ausnahmen Java Basics - Anfänger-Themen 1
krgewb Java Streams Java Basics - Anfänger-Themen 10
A Überwältigt von der komplexen Java Welt Java Basics - Anfänger-Themen 29
O Mehrfachvererbung auf Spezifikations- und Implementierungsebene in Java. Interfaces Java Basics - Anfänger-Themen 19
John_Sace Homogene Realisierung von Generics in Java ? Java Basics - Anfänger-Themen 19
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
R mit Java API arbeiten Java Basics - Anfänger-Themen 9
P JDK installieren Probleme bei der Java-Installation Java Basics - Anfänger-Themen 8
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
Timo12345 JNLP File mit Java öffnen Java Basics - Anfänger-Themen 2
S Video Editierung mit Java.._ Java Basics - Anfänger-Themen 2
F Einstelungen in Java - CursorBlinkRate Java Basics - Anfänger-Themen 10
A PHP $_POST["name"] in Java Java Basics - Anfänger-Themen 3
vivansai21 Is there a oneliner to create a SortedSet filled with one or multiple elements in Java? Java Basics - Anfänger-Themen 9
Athro-Hiro Weißes Bild in Java erstellen Java Basics - Anfänger-Themen 3
Arjunreddy Can someone please tell me how to use a debugger in BlueJ(a Java environment) Java Basics - Anfänger-Themen 1
M Java assoziationen (UML) Java Basics - Anfänger-Themen 8
H Excel-Tabellen mit Java erstellen Java Basics - Anfänger-Themen 4
Simon16 Java ArrayListe von einer Klasse sortieren Java Basics - Anfänger-Themen 2
P Wie kann ich in meinem Java Programm etwas dauerhaft speichern? Java Basics - Anfänger-Themen 5
H Nutzt Eclipse alle CPU-Threads beim Ausführen von Java-Programmen? Java Basics - Anfänger-Themen 4
xXGrowGuruXx Java einstieg, leichte sache 0 verstanden Java Basics - Anfänger-Themen 7
A java.sql.SQLException: Data type mismatch. Java Basics - Anfänger-Themen 1
H Java-Programm zur Ausgabe von Zuständen Java Basics - Anfänger-Themen 80
N Java Spiel Figur auf dem Hintergrundbild bewegen. Java Basics - Anfänger-Themen 11
G Kann Java-Programm nicht als jar aufrufen, auch als EXE nicht Java Basics - Anfänger-Themen 19
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
A Lerngruppe Java Java Basics - Anfänger-Themen 2
G Help me in the Java Program Java Basics - Anfänger-Themen 2
L Java- Vererbung Java Basics - Anfänger-Themen 4
LimDul Suche Java Stream Tutorial Java Basics - Anfänger-Themen 2
_so_far_away_ Ich möchte Java lernen Java Basics - Anfänger-Themen 11
benny1993 Java Programm erstellen für ein Fußball-Turnier Java Basics - Anfänger-Themen 3
M Datentypen While-Schleife eine Java Methode erstellen Java Basics - Anfänger-Themen 3
V Bild per Java Script austauschen Java Basics - Anfänger-Themen 7
MoxMorris this Keyword in Java Java Basics - Anfänger-Themen 14
D Wie kann man in Java nach Arrays auf Duplikate prüfen Java Basics - Anfänger-Themen 12
wolei JAVA Zeitdifferenz feststellen. Java Basics - Anfänger-Themen 4
DiyarcanZeren Rekursion in Java Java Basics - Anfänger-Themen 5
wolei Java generic interface in a generic class Java Basics - Anfänger-Themen 6
monsterherz Ablauf der Erstellung eines Java Programmes Java Basics - Anfänger-Themen 17
monsterherz Circle.java:5: error: <identifier> expected Java Basics - Anfänger-Themen 2
julian-fr Wie kann ich am besten Java lernen? Java Basics - Anfänger-Themen 17
A Java-Properties und -RessourceBundles Java Basics - Anfänger-Themen 5
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
R Java kann nicht installiert werden Java Basics - Anfänger-Themen 8
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
G In ein java Dokument Ton einbinden Java Basics - Anfänger-Themen 1
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
KeinJavaFreak Erste Schritte Programm "Java(TM) Platform SE binary " nicht vorhanden Java Basics - Anfänger-Themen 1
KeinJavaFreak Erste Schritte Java "Executable Jar File" nicht vorhanden Java Basics - Anfänger-Themen 1
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
J Java Testklasse Java Basics - Anfänger-Themen 5
P Java Selenium . Parameterized.Parameters erzeugt eine Fehlermeldung Java Basics - Anfänger-Themen 14
W Java-Code mit Array Java Basics - Anfänger-Themen 14
W Java-Code Java Basics - Anfänger-Themen 2
P BeforeEach AfterEach werden nicht ausgeführt. Java / Selenium Java Basics - Anfänger-Themen 4
A Wie führe ich eine Batch-Datei von meiner Java-Anwendung aus? Java Basics - Anfänger-Themen 18
W Java code- TicTac toe Java Basics - Anfänger-Themen 51
Ostkreuz Java Docs Java Basics - Anfänger-Themen 9
R Java boolean Unterschied " == " und " = " Java Basics - Anfänger-Themen 3
D Java Programm mit Batch-Datei starten Java Basics - Anfänger-Themen 32
W Java-code Java Basics - Anfänger-Themen 8
W Java-code Java Basics - Anfänger-Themen 9
W Java-Code erklären Java Basics - Anfänger-Themen 6
A Java Kurs / Tutorial Java Basics - Anfänger-Themen 6
K Java Lotto Spiel; ich komme nicht weiter Java Basics - Anfänger-Themen 15
R Operatoren Rechenoperation in Java verwenden für Calculator Java Basics - Anfänger-Themen 2
P Java 2n Potenzieren Java Basics - Anfänger-Themen 1
J Java Hamster Java Basics - Anfänger-Themen 4
D Wie sehe ich ein Java-Programm? Java Basics - Anfänger-Themen 27
V Die Funktion des neuen Schlüsselworts in Java Java Basics - Anfänger-Themen 1
W Junit-Test (Java) Java Basics - Anfänger-Themen 4
W Testfälle bei Java ( Junit-Test) Java Basics - Anfänger-Themen 3
laxla123 If-else Java Java Basics - Anfänger-Themen 4
RashAGhul Java Verwaltungstool Erstellen mit kaum Wissen Java Basics - Anfänger-Themen 9
S Substring in java Java Basics - Anfänger-Themen 3
Z Operatoren Java Applikation Java Basics - Anfänger-Themen 8
Tw1Z Erste Schritte Sort in java Java Basics - Anfänger-Themen 2
sasnitzer java augensumme von zwei würfeln ist 1 Java Basics - Anfänger-Themen 8

Ähnliche Java Themen

Neue Themen


Oben