Mule ruft eine statische Ausnahme auf, während sie Stream aus dem Dateianschluss lesenJava

Java-Forum
Anonymous
 Mule ruft eine statische Ausnahme auf, während sie Stream aus dem Dateianschluss lesen

Post by Anonymous »

Ich lese die .dat -Datei mit dem Dateianschluss. Ich übergeben diesen Stream in die Java -Methode, die den Stream verbraucht, mit dem gegebenen Trennzeichen aufgeteilt und an TMP Dir. < /P>
schreibt










< /code>
Java-Klasse: < /p>
import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import org.json.JSONObject;

public class PDFChunker {

static String delimiter = "\n";

public static String splitAndChunkToFile(InputStream in ) throws IOException { return PDFChunker.splitAndChunkToFile( in , "/Users/Work/studio/dat-to-pdf/src/main/resources/tmp/"); }

public static String splitAndChunkToFile(InputStream in , String path) throws IOException {
int chunks = 0;
long totalSize = 0;

String uuid = UUID.randomUUID().toString();
List < JSONObject > chunkList = new ArrayList < JSONObject > ();

try (BufferedReader reader = new BufferedReader(new InputStreamReader( in , StandardCharsets.UTF_8))) {
String line;
StringBuilder currentChunk = new StringBuilder();

while ((line = reader.readLine()) != null) {
// Special handling for newline delimiters
boolean isDelimiter;
if (delimiter.equals("\n") || delimiter.equals("\r\n") || delimiter.equals("\r") || delimiter.equals(System.lineSeparator()) || delimiter.equals("NEWLINE")) {
// For newline delimiters, each line is a separate chunk
isDelimiter = true;
} else {
// Check if this line contains the delimiter
isDelimiter = line.trim().equals(delimiter);
}

if (isDelimiter && !delimiter.matches("\\r?\\n") && !delimiter.equals("NEWLINE") && !delimiter.equals(System.lineSeparator())) {
// Write the current chunk if it has content
if (currentChunk.length() > 0) {
writeChunkToFile(currentChunk.toString(), uuid, ++chunks, path, chunkList);
totalSize += currentChunk.toString().getBytes(StandardCharsets.UTF_8).length;
currentChunk.setLength(0); // Reset for next chunk
}
} else {
// For newline delimiters, each line becomes a separate chunk
if (delimiter.equals("\n") || delimiter.equals("\r\n") || delimiter.equals("\r") || delimiter.equals(System.lineSeparator()) || delimiter.equals("NEWLINE")) {
// Write each line as a separate chunk
if (line.trim().length() > 0) { // Skip empty lines
writeChunkToFile(line, uuid, ++chunks, path, chunkList);
totalSize += line.getBytes(StandardCharsets.UTF_8).length;
}
} else {
// Add line to current chunk for other delimiters
if (currentChunk.length() > 0) {
currentChunk.append(System.lineSeparator());
}
currentChunk.append(line);
}
}
}

// Write the last chunk if it has content
if (currentChunk.length() > 0) {
writeChunkToFile(currentChunk.toString(), uuid, ++chunks, path, chunkList);
totalSize += currentChunk.toString().getBytes(StandardCharsets.UTF_8).length;
}
}

JSONObject chunkResult = new JSONObject();
chunkResult.put("uuid", uuid);
chunkResult.put("chunks", chunks);
chunkResult.put("delimiter", delimiter);
chunkResult.put("size", totalSize);
chunkResult.put("chunkList", chunkList);
return chunkResult.toString();

private static void writeChunkToFile(String content, String uuid, int chunkNumber, String path, List < JSONObject > chunkList) throws IOException { File chunkFile = new File(path, "chunk_" + uuid + "_" + String.format("%05d", chunkNumber) + ".pdf"); chunkFile.getParentFile().mkdirs(); System.out.println("Writing PDF chunk to disk: " + chunkFile.getPath());

JSONObject fileObject = new JSONObject();
fileObject.put("path", chunkFile.getPath());
fileObject.put("fileName", chunkFile.getName());
fileObject.put("contentLength", content.length());
chunkList.add(fileObject);

try (PrintWriter writer = new PrintWriter(
new OutputStreamWriter(new FileOutputStream(chunkFile), StandardCharsets.UTF_8))) {
writer.print(content);
}

}
< /code>
Es verarbeitet den Stream und schreibt den Inhalt wie erwartet an TMP DIR. Aber es wird am Ende eine Ausnahme gemacht, wie sie unten geklebt wurde. < /P>
org.mule.runtime.core.privileged.exception.DefaultExceptionListener:
********************************************************************************
Message : Invocation of static Method 'splitAndChunkToFile(java.io.InputStream)' from Class 'com.test.pdf.PDFChunker' with arguments [org.mule.extension.file.internal.FileInputStream arg0] resulted in an error.
Expected arguments are [java.io.InputStream in]
Element : dat-to-pdfFlow/processors/1 @ dat-to-pdf:dat-to-pdf.xml:40 (Invoke static)
Element DSL :


Error type : JAVA:INVOCATION
FlowStack : at dat-to-pdfFlow(dat-to-pdfFlow/processors/1 @ dat-to-pdf:dat-to-pdf.xml:40 (Invoke static))
Payload : org.mule.extension.file.internal.FileInputStream@249fd4c
--------------------------------------------------------------------------------
Root Exception stack trace:
java.nio.channels.ClosedChannelException
at java.base/sun.nio.ch.FileChannelImpl.ensureOpen(FileChannelImpl.java:159)
at java.base/sun.nio.ch.FileChannelImpl.read(FileChannelImpl.java:218)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:65)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:107)
at java.base/sun.nio.ch.ChannelInputStream.read(ChannelInputStream.java:101)
at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:282)
at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:343)
at org.mule.extension.file.common.api.util.LazyInputStreamProxy.read(LazyInputStreamProxy.java:42)
at org.apache.commons.io.input.ProxyInputStream.read(ProxyInputStream.java:102)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:281)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:324)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:189)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:177)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:162)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:329)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:396)
at com.test.pdf.PDFChunker.splitAndChunkToFile(PDFChunker.java:37)
at com.test.pdf.PDFChunker.splitAndChunkToFile(PDFChunker.java:22)
< /code>
Wie kann ich diese Ausnahme lösen?
Danke für die Zeit und den Aufwand! < /p>

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post