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