diff --git a/pom.xml b/pom.xml
index cf2862b..252d5b4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -11,9 +11,9 @@
https://github.com/alipay/rdf-file
- 2.2.10
- 2.2.10
- 2.2.10
+ 2.2.11
+ 2.2.11
+ 2.2.11
diff --git a/rdf-file-core/src/main/java/com/alipay/rdf/file/common/FileWriterTemplate.java b/rdf-file-core/src/main/java/com/alipay/rdf/file/common/FileWriterTemplate.java
new file mode 100644
index 0000000..c263a8c
--- /dev/null
+++ b/rdf-file-core/src/main/java/com/alipay/rdf/file/common/FileWriterTemplate.java
@@ -0,0 +1,40 @@
+/*
+ * Ant Group
+ * Copyright (c) 2004-2023 All Rights Reserved.
+ */
+package com.alipay.rdf.file.common;
+
+import com.alipay.rdf.file.interfaces.FileFactory;
+import com.alipay.rdf.file.interfaces.FileWriter;
+import com.alipay.rdf.file.model.FileConfig;
+import com.alipay.rdf.file.util.RdfFileUtil;
+
+/**
+ * @author quhongwei
+ * @version FileWriterTemplate.java, v 0.1 2023年03月24日 2:07 下午 quhongwei Exp $
+ */
+public abstract class FileWriterTemplate {
+ private final FileWriter fileWriter;
+
+ public FileWriterTemplate(FileConfig fileConfig) {
+ this.fileWriter = FileFactory.createWriter(fileConfig);
+ }
+
+ public void process() throws Throwable {
+ try {
+ doProcess(fileWriter);
+ } catch (Throwable t) {
+ RdfFileUtil.setWriteError(fileWriter);
+
+ if (t instanceof RuntimeException) {
+ throw t;
+ } else {
+ throw new RuntimeException("rdf-file#FileWriterTemplate file write error.", t);
+ }
+ } finally {
+ fileWriter.close();
+ }
+ }
+
+ protected abstract void doProcess(FileWriter fileWriter) throws Throwable;
+}
\ No newline at end of file
diff --git a/rdf-file-core/src/main/java/com/alipay/rdf/file/common/FileWriterWrapper.java b/rdf-file-core/src/main/java/com/alipay/rdf/file/common/FileWriterWrapper.java
index 0ccdb16..3e77606 100644
--- a/rdf-file-core/src/main/java/com/alipay/rdf/file/common/FileWriterWrapper.java
+++ b/rdf-file-core/src/main/java/com/alipay/rdf/file/common/FileWriterWrapper.java
@@ -33,7 +33,8 @@ public void writeHead(Object headBean) {
} catch (RuntimeException e) {
hasError = true;
throw e;
- } catch (Exception e) {
+ } catch (Throwable e) {
+ hasError = true;
throw new RdfFileException("rdf-file#FileWriterWrapper writeHead error filePath=["
+ getFileConfig().getFilePath() + "], head=[" + headBean
+ "]",
@@ -48,7 +49,8 @@ public void writeRow(Object rowBean) {
} catch (RuntimeException e) {
hasError = true;
throw e;
- } catch (Exception e) {
+ } catch (Throwable e) {
+ hasError = true;
throw new RdfFileException("rdf-file#FileWriterWrapper writeRow error filePath=["
+ getFileConfig().getFilePath() + "], row=[" + rowBean + "]",
e, RdfErrorEnum.UNKOWN);
@@ -62,7 +64,8 @@ public void writeTail(Object tailBean) {
} catch (RuntimeException e) {
hasError = true;
throw e;
- } catch (Exception e) {
+ } catch (Throwable e) {
+ hasError = true;
throw new RdfFileException("rdf-file#FileWriterWrapper writeTail error filePath=["
+ getFileConfig().getFilePath() + "], tail=[" + tailBean
+ "]",
@@ -77,7 +80,8 @@ public void writeLine(String line) {
} catch (RuntimeException e) {
hasError = true;
throw e;
- } catch (Exception e) {
+ } catch (Throwable e) {
+ hasError = true;
throw new RdfFileException("rdf-file#FileWriterWrapper writeLine error filePath=["
+ getFileConfig().getFilePath() + "], line=[" + line + "]",
e, RdfErrorEnum.UNKOWN);
@@ -111,7 +115,8 @@ public void append(InputStream in) {
} catch (RuntimeException e) {
hasError = true;
throw e;
- } catch (Exception e) {
+ } catch (Throwable e) {
+ hasError = true;
throw new RdfFileException("rdf-file#FileWriterWrapper append error filePath=["
+ getFileConfig().getFilePath() + "]",
e, RdfErrorEnum.UNKOWN);
@@ -125,7 +130,8 @@ public void ensureOpen() {
} catch (RuntimeException e) {
hasError = true;
throw e;
- } catch (Exception e) {
+ } catch (Throwable e) {
+ hasError = true;
throw new RdfFileException("rdf-file#FileWriterWrapper ensureOpen error filePath=["
+ getFileConfig().getFilePath() + "]",
e, RdfErrorEnum.UNKOWN);
@@ -137,4 +143,7 @@ public FileConfig getFileConfig() {
return writer.getFileConfig();
}
+ public void setHasError(boolean hasError) {
+ this.hasError = hasError;
+ }
}
diff --git a/rdf-file-core/src/main/java/com/alipay/rdf/file/common/ProtocolFileMerger.java b/rdf-file-core/src/main/java/com/alipay/rdf/file/common/ProtocolFileMerger.java
index f2d6e69..1b9dbb9 100644
--- a/rdf-file-core/src/main/java/com/alipay/rdf/file/common/ProtocolFileMerger.java
+++ b/rdf-file-core/src/main/java/com/alipay/rdf/file/common/ProtocolFileMerger.java
@@ -36,9 +36,9 @@
/**
* Copyright (C) 2013-2018 Ant Financial Services Group
- *
+ *
* 协议文件合并
- *
+ *
* @author hongwei.quhw
* @version $Id: ProtocolFileMerger.java, v 0.1 2017年8月10日 下午8:01:11 hongwei.quhw Exp $
*/
@@ -85,6 +85,9 @@ public void merge(MergerConfig config) {
RdfProfiler.enter("rdf-file#merge tail start...");
mergeTail(config);
RdfProfiler.release("rdf-file#merge tail end");
+ } catch (Throwable e) {
+ RdfFileUtil.setWriteError(fileWriter);
+ throw new RuntimeException("rdf-file#ProtocolFileMerger error.", e);
} finally {
if (null != fileWriter) {
fileWriter.close();
diff --git a/rdf-file-core/src/main/java/com/alipay/rdf/file/util/RdfFileUtil.java b/rdf-file-core/src/main/java/com/alipay/rdf/file/util/RdfFileUtil.java
index 4d57e7d..6ea855e 100644
--- a/rdf-file-core/src/main/java/com/alipay/rdf/file/util/RdfFileUtil.java
+++ b/rdf-file-core/src/main/java/com/alipay/rdf/file/util/RdfFileUtil.java
@@ -1,7 +1,9 @@
package com.alipay.rdf.file.util;
+import com.alipay.rdf.file.common.FileWriterWrapper;
import com.alipay.rdf.file.exception.RdfErrorEnum;
import com.alipay.rdf.file.exception.RdfFileException;
+import com.alipay.rdf.file.interfaces.FileWriter;
import com.alipay.rdf.file.loader.ProtocolLoader;
import com.alipay.rdf.file.loader.TemplateLoader;
import com.alipay.rdf.file.meta.FileMeta;
@@ -906,4 +908,10 @@ public static boolean isRelationReadRowCompatibility(FileConfig fileConfig) {
return false;
}
+
+ public static void setWriteError(FileWriter fileWriter) {
+ if (fileWriter instanceof FileWriterWrapper) {
+ ((FileWriterWrapper) fileWriter).setHasError(true);
+ }
+ }
}
diff --git a/rdf-file-test/src/main/resources/pom/rdf-file-core.pom b/rdf-file-test/src/main/resources/pom/rdf-file-core.pom
index e06134e..3505ab5 100644
--- a/rdf-file-test/src/main/resources/pom/rdf-file-core.pom
+++ b/rdf-file-test/src/main/resources/pom/rdf-file-core.pom
@@ -4,7 +4,7 @@
4.0.0
com.alipay.rdf.file
rdf-file-core
- 2.2.10
+ 2.2.11
RDF FILE CORE
RDF FILE CORE
https://github.com/alipay/rdf-file
diff --git a/rdf-file-test/src/main/resources/pom/rdf-file-oss.pom b/rdf-file-test/src/main/resources/pom/rdf-file-oss.pom
index c36e611..87dad7d 100644
--- a/rdf-file-test/src/main/resources/pom/rdf-file-oss.pom
+++ b/rdf-file-test/src/main/resources/pom/rdf-file-oss.pom
@@ -4,7 +4,7 @@
4.0.0
com.alipay.rdf.file
rdf-file-oss
- 2.2.10
+ 2.2.11
RDF FILE OSS
RDF FILE OSS
https://github.com/alipay/rdf-file
diff --git a/rdf-file-test/src/main/resources/pom/rdf-file-sftp.pom b/rdf-file-test/src/main/resources/pom/rdf-file-sftp.pom
index 7785e05..c6a9a52 100644
--- a/rdf-file-test/src/main/resources/pom/rdf-file-sftp.pom
+++ b/rdf-file-test/src/main/resources/pom/rdf-file-sftp.pom
@@ -4,7 +4,7 @@
4.0.0
com.alipay.rdf.file
rdf-file-sftp
- 2.2.10
+ 2.2.11
RDF FILE SFTP
RDF FILE SFTP
https://github.com/alipay/rdf-file