You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@james.apache.org by bt...@apache.org on 2022/11/22 05:48:45 UTC

[james-project] 04/04: JAMES-3860 Rely on Files.createTempFile

This is an automated email from the ASF dual-hosted git repository.

btellier pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/james-project.git

commit a109725eafecb05f63f8312fcd8c6ec51f15e3d9
Author: Benoit Tellier <bt...@linagora.com>
AuthorDate: Mon Nov 21 09:12:36 2022 +0700

    JAMES-3860 Rely on Files.createTempFile
---
 .../james/mailbox/store/StoreMessageManager.java       |  3 ++-
 .../james/transport/mailets/StripAttachment.java       |  3 ++-
 .../main/java/org/apache/james/JPAJamesServerMain.java |  1 -
 .../server/core/BufferedDeferredFileOutputStream.java  | 18 ++++++------------
 .../server/core/MimeMessageInputStreamSource.java      |  9 ++-------
 .../core/BufferedDeferredFileOutputStreamTest.java     | 13 ++++---------
 .../sieverepository/file/SieveFileRepository.java      |  3 ++-
 .../imapserver/netty/ImapRequestFrameDecoder.java      |  3 ++-
 8 files changed, 20 insertions(+), 33 deletions(-)

diff --git a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
index 0218ae6460..2eea248588 100644
--- a/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
+++ b/mailbox/store/src/main/java/org/apache/james/mailbox/store/StoreMessageManager.java
@@ -30,6 +30,7 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.EnumSet;
@@ -351,7 +352,7 @@ public class StoreMessageManager implements MessageManager {
             // Create a temporary file and copy the message to it. We will work
             // with the file as
             // source for the InputStream
-            file = File.createTempFile("imap", ".msg");
+            file = Files.createTempFile("imap", ".msg").toFile();
             try (FileOutputStream out = new FileOutputStream(file);
                 BufferedOutputStream bufferedOut = new BufferedOutputStream(out);
                 BufferedInputStream tmpMsgIn = new BufferedInputStream(new TeeInputStream(msgIn, bufferedOut));
diff --git a/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java b/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
index bd04f95ba2..12c8b7f289 100644
--- a/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
+++ b/mailet/standard/src/main/java/org/apache/james/transport/mailets/StripAttachment.java
@@ -25,6 +25,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
+import java.nio.file.Files;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Locale;
@@ -463,7 +464,7 @@ public class StripAttachment extends GenericMailet {
 
     private File createTempFile(String originalFileName) throws IOException {
         OutputFileName outputFileName = OutputFileName.from(originalFileName);
-        return File.createTempFile(outputFileName.getPrefix(), outputFileName.getSuffix(), new File(directoryName));
+        return Files.createTempFile(new File(directoryName).toPath(), outputFileName.getPrefix(), outputFileName.getSuffix()).toFile();
     }
 
     @VisibleForTesting static class OutputFileName {
diff --git a/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java b/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java
index 063366b0ab..aa62cbe259 100644
--- a/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java
+++ b/server/apps/jpa-app/src/main/java/org/apache/james/JPAJamesServerMain.java
@@ -38,7 +38,6 @@ import org.apache.james.modules.protocols.SMTPServerModule;
 import org.apache.james.modules.queue.activemq.ActiveMQQueueModule;
 import org.apache.james.modules.server.DataRoutesModules;
 import org.apache.james.modules.server.DefaultProcessorsConfigurationProviderModule;
-import org.apache.james.modules.server.ElasticSearchMetricReporterModule;
 import org.apache.james.modules.server.InconsistencyQuotasSolvingRoutesModule;
 import org.apache.james.modules.server.JMXServerModule;
 import org.apache.james.modules.server.MailQueueRoutesModule;
diff --git a/server/container/core/src/main/java/org/apache/james/server/core/BufferedDeferredFileOutputStream.java b/server/container/core/src/main/java/org/apache/james/server/core/BufferedDeferredFileOutputStream.java
index b5e3f1e58d..8a528dd7da 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/BufferedDeferredFileOutputStream.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/BufferedDeferredFileOutputStream.java
@@ -25,6 +25,7 @@ import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.nio.file.Files;
 
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.io.output.ByteArrayOutputStream;
@@ -79,11 +80,6 @@ public class BufferedDeferredFileOutputStream extends ThresholdingOutputStream i
      */
     private final String suffix;
 
-    /**
-     * The directory to use for temporary files.
-     */
-    private final File directory;
-
 
     /**
      * True when close() has been called successfully.
@@ -98,7 +94,7 @@ public class BufferedDeferredFileOutputStream extends ThresholdingOutputStream i
      * @param outputFile The file to which data is saved beyond the threshold.
      */
     public BufferedDeferredFileOutputStream(final int threshold, final File outputFile) {
-        this(threshold,  outputFile, null, null, null);
+        this(threshold,  outputFile, null, null);
     }
 
 
@@ -109,10 +105,9 @@ public class BufferedDeferredFileOutputStream extends ThresholdingOutputStream i
      * @param threshold  The number of bytes at which to trigger an event.
      * @param prefix Prefix to use for the temporary file.
      * @param suffix Suffix to use for the temporary file.
-     * @param directory Temporary file directory.
      */
-    public BufferedDeferredFileOutputStream(final int threshold, final String prefix, final String suffix, final File directory) {
-        this(threshold, null, prefix, suffix, directory);
+    public BufferedDeferredFileOutputStream(final int threshold, final String prefix, final String suffix) {
+        this(threshold, null, prefix, suffix);
         if (prefix == null) {
             throw new IllegalArgumentException("Temporary file prefix is missing");
         }
@@ -129,7 +124,7 @@ public class BufferedDeferredFileOutputStream extends ThresholdingOutputStream i
      * @param directory Temporary file directory.
      */
     private BufferedDeferredFileOutputStream(final int threshold, final File outputFile, final String prefix,
-                                             final String suffix, final File directory) {
+                                             final String suffix) {
         super(threshold);
         this.outputFile = outputFile;
 
@@ -137,7 +132,6 @@ public class BufferedDeferredFileOutputStream extends ThresholdingOutputStream i
         currentOutputStream = memoryOutputStream;
         this.prefix = prefix;
         this.suffix = suffix;
-        this.directory = directory;
     }
 
     /**
@@ -164,7 +158,7 @@ public class BufferedDeferredFileOutputStream extends ThresholdingOutputStream i
     @Override
     protected void thresholdReached() throws IOException {
         if (prefix != null) {
-            outputFile = File.createTempFile(prefix, suffix, directory);
+            outputFile = Files.createTempFile(prefix, suffix).toFile();
         }
         final FileOutputStream fos = new FileOutputStream(outputFile);
         try {
diff --git a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java
index 4a88390545..6c8614a2a3 100644
--- a/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java
+++ b/server/container/core/src/main/java/org/apache/james/server/core/MimeMessageInputStreamSource.java
@@ -64,11 +64,6 @@ public class MimeMessageInputStreamSource extends Disposable.LeakAware<MimeMessa
      */
     private final String sourceId;
 
-    /**
-     * Temporary directory to use
-     */
-    private static final File TMPDIR = new File(System.getProperty("java.io.tmpdir"));
-
     static class Resource extends LeakAware.Resource {
         private final BufferedDeferredFileOutputStream out;
         private final Set<InputStream> streams;
@@ -111,7 +106,7 @@ public class MimeMessageInputStreamSource extends Disposable.LeakAware<MimeMessa
 
     public static MimeMessageInputStreamSource create(String key, InputStream in) throws MessagingException {
         Disposable.LeakAware.track();
-        BufferedDeferredFileOutputStream out = new BufferedDeferredFileOutputStream(THRESHOLD, "mimemessage-" + key, ".m64", TMPDIR);
+        BufferedDeferredFileOutputStream out = new BufferedDeferredFileOutputStream(THRESHOLD, "mimemessage-" + key, ".m64");
         Resource resource = new Resource(out, new HashSet<>());
 
         return new MimeMessageInputStreamSource(resource, key, in);
@@ -119,7 +114,7 @@ public class MimeMessageInputStreamSource extends Disposable.LeakAware<MimeMessa
 
     public static MimeMessageInputStreamSource create(String key) {
         Disposable.LeakAware.track();
-        BufferedDeferredFileOutputStream out = new BufferedDeferredFileOutputStream(THRESHOLD, "mimemessage-" + key, ".m64", TMPDIR);
+        BufferedDeferredFileOutputStream out = new BufferedDeferredFileOutputStream(THRESHOLD, "mimemessage-" + key, ".m64");
         Resource resource = new Resource(out, new HashSet<>());
 
         return new MimeMessageInputStreamSource(resource, key);
diff --git a/server/container/core/src/test/java/org/apache/james/server/core/BufferedDeferredFileOutputStreamTest.java b/server/container/core/src/test/java/org/apache/james/server/core/BufferedDeferredFileOutputStreamTest.java
index c4c683ad0a..52920bc314 100644
--- a/server/container/core/src/test/java/org/apache/james/server/core/BufferedDeferredFileOutputStreamTest.java
+++ b/server/container/core/src/test/java/org/apache/james/server/core/BufferedDeferredFileOutputStreamTest.java
@@ -245,9 +245,8 @@ public class BufferedDeferredFileOutputStreamTest {
 
         final String prefix = "commons-io-test";
         final String suffix = ".out";
-        final File tempDir  = new File(".");
         final BufferedDeferredFileOutputStream dfos =
-            new BufferedDeferredFileOutputStream(testBytes.length + 42,  prefix, suffix, tempDir);
+            new BufferedDeferredFileOutputStream(testBytes.length + 42,  prefix, suffix);
         assertNull("Check file is null-A", dfos.getFile());
         try
         {
@@ -269,9 +268,8 @@ public class BufferedDeferredFileOutputStreamTest {
 
         final String prefix = "commons-io-test";
         final String suffix = ".out";
-        final File tempDir  = new File(".");
         final BufferedDeferredFileOutputStream dfos =
-            new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix, tempDir);
+            new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix);
         assertNull("Check file is null-A", dfos.getFile());
         try
         {
@@ -287,7 +285,6 @@ public class BufferedDeferredFileOutputStreamTest {
         assertTrue("Check file exists", dfos.getFile().exists());
         assertTrue("Check prefix", dfos.getFile().getName().startsWith(prefix));
         assertTrue("Check suffix", dfos.getFile().getName().endsWith(suffix));
-        assertEquals("Check dir", tempDir.getPath(), dfos.getFile().getParent());
 
         verifyResultFile(dfos.getFile());
 
@@ -303,9 +300,8 @@ public class BufferedDeferredFileOutputStreamTest {
 
         final String prefix = "commons-io-test";
         final String suffix = null;
-        final File tempDir  = null;
         final BufferedDeferredFileOutputStream dfos =
-            new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix, tempDir);
+            new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix);
         assertNull("Check file is null-A", dfos.getFile());
         try
         {
@@ -337,10 +333,9 @@ public class BufferedDeferredFileOutputStreamTest {
 
         final String prefix = null;
         final String suffix = ".out";
-        final File tempDir  = new File(".");
         try
         {
-            (new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix, tempDir)).close();
+            (new BufferedDeferredFileOutputStream(testBytes.length - 5, prefix, suffix)).close();
             fail("Expected IllegalArgumentException ");
         }
         catch (final IllegalArgumentException e) {
diff --git a/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java b/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
index b70496b6b3..aeac6604cb 100644
--- a/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
+++ b/server/data/data-file/src/main/java/org/apache/james/sieverepository/file/SieveFileRepository.java
@@ -29,6 +29,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStreamWriter;
 import java.io.Writer;
+import java.nio.file.Files;
 import java.time.Instant;
 import java.time.ZoneOffset;
 import java.time.ZonedDateTime;
@@ -102,7 +103,7 @@ public class SieveFileRepository implements SieveRepository {
         File tmpFile = null;
 
         try {
-            tmpFile = File.createTempFile(file.getName(), ".tmp", file.getParentFile());
+            tmpFile = Files.createTempFile(file.getParentFile().toPath(), "", ".tmp").toFile();
             try (Writer out = new OutputStreamWriter(new BufferedOutputStream(
                     new FileOutputStream(tmpFile), bufferSize), UTF_8)) {
                 out.write(content);
diff --git a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
index 17c4d9db12..02505969a2 100644
--- a/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
+++ b/server/protocols/protocols-imap4/src/main/java/org/apache/james/imapserver/netty/ImapRequestFrameDecoder.java
@@ -25,6 +25,7 @@ import java.io.File;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
+import java.nio.file.Files;
 import java.util.Deque;
 import java.util.HashMap;
 import java.util.List;
@@ -203,7 +204,7 @@ public class ImapRequestFrameDecoder extends ByteToMessageDecoder implements Net
         if (attachment.containsKey(STORED_DATA)) {
             sink = (Sinks.Many<byte[]>) attachment.get(SINK);
         } else {
-            f = File.createTempFile("imap-literal", ".tmp");
+            f = Files.createTempFile("imap-literal", ".tmp").toFile();
             attachment.put(STORED_DATA, f);
             final AtomicInteger written = new AtomicInteger(0);
             attachment.put(WRITTEN_DATA, written);


---------------------------------------------------------------------
To unsubscribe, e-mail: notifications-unsubscribe@james.apache.org
For additional commands, e-mail: notifications-help@james.apache.org