in txtfilereader/src/main/java/com/alibaba/datax/plugin/reader/txtfilereader/TxtFileReader.java [57:186]
private void validateParameter() {
// Compatible with the old version, path is a string before
String pathInString = this.originConfig.getNecessaryValue(Key.PATH,
TxtFileReaderErrorCode.REQUIRED_VALUE);
if (StringUtils.isBlank(pathInString)) {
throw DataXException.asDataXException(
TxtFileReaderErrorCode.REQUIRED_VALUE,
"您需要指定待读取的源目录或文件");
}
if (!pathInString.startsWith("[") && !pathInString.endsWith("]")) {
path = new ArrayList<String>();
path.add(pathInString);
} else {
path = this.originConfig.getList(Key.PATH, String.class);
if (null == path || path.size() == 0) {
throw DataXException.asDataXException(
TxtFileReaderErrorCode.REQUIRED_VALUE,
"您需要指定待读取的源目录或文件");
}
}
String encoding = this.originConfig
.getString(
com.alibaba.datax.plugin.unstructuredstorage.reader.Key.ENCODING,
com.alibaba.datax.plugin.unstructuredstorage.reader.Constant.DEFAULT_ENCODING);
if (StringUtils.isBlank(encoding)) {
this.originConfig
.set(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.ENCODING,
com.alibaba.datax.plugin.unstructuredstorage.reader.Constant.DEFAULT_ENCODING);
} else {
try {
encoding = encoding.trim();
this.originConfig
.set(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.ENCODING,
encoding);
Charsets.toCharset(encoding);
} catch (UnsupportedCharsetException uce) {
throw DataXException.asDataXException(
TxtFileReaderErrorCode.ILLEGAL_VALUE,
String.format("不支持您配置的编码格式 : [%s]", encoding), uce);
} catch (Exception e) {
throw DataXException.asDataXException(
TxtFileReaderErrorCode.CONFIG_INVALID_EXCEPTION,
String.format("编码配置异常, 请联系我们: %s", e.getMessage()),
e);
}
}
// column: 1. index type 2.value type 3.when type is Date, may have
// format
List<Configuration> columns = this.originConfig
.getListConfiguration(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COLUMN);
// handle ["*"]
if (null != columns && 1 == columns.size()) {
String columnsInStr = columns.get(0).toString();
if ("\"*\"".equals(columnsInStr) || "'*'".equals(columnsInStr)) {
this.originConfig
.set(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COLUMN,
null);
columns = null;
}
}
if (null != columns && columns.size() != 0) {
for (Configuration eachColumnConf : columns) {
eachColumnConf
.getNecessaryValue(
com.alibaba.datax.plugin.unstructuredstorage.reader.Key.TYPE,
TxtFileReaderErrorCode.REQUIRED_VALUE);
Integer columnIndex = eachColumnConf
.getInt(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.INDEX);
String columnValue = eachColumnConf
.getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.VALUE);
if (null == columnIndex && null == columnValue) {
throw DataXException.asDataXException(
TxtFileReaderErrorCode.NO_INDEX_VALUE,
"由于您配置了type, 则至少需要配置 index 或 value");
}
if (null != columnIndex && null != columnValue) {
throw DataXException.asDataXException(
TxtFileReaderErrorCode.MIXED_INDEX_VALUE,
"您混合配置了index, value, 每一列同时仅能选择其中一种");
}
if (null != columnIndex && columnIndex < 0) {
throw DataXException.asDataXException(
TxtFileReaderErrorCode.ILLEGAL_VALUE, String
.format("index需要大于等于0, 您配置的index为[%s]",
columnIndex));
}
}
}
// only support compress types
String compress = this.originConfig
.getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COMPRESS);
if (StringUtils.isBlank(compress)) {
this.originConfig
.set(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COMPRESS,
null);
} else {
Set<String> supportedCompress = Sets
.newHashSet("gzip", "bzip2", "zip");
compress = compress.toLowerCase().trim();
if (!supportedCompress.contains(compress)) {
throw DataXException
.asDataXException(
TxtFileReaderErrorCode.ILLEGAL_VALUE,
String.format(
"仅支持 gzip, bzip2, zip 文件压缩格式 , 不支持您配置的文件压缩格式: [%s]",
compress));
}
this.originConfig
.set(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.COMPRESS,
compress);
}
String delimiterInStr = this.originConfig
.getString(com.alibaba.datax.plugin.unstructuredstorage.reader.Key.FIELD_DELIMITER);
// warn: if have, length must be one
if (null != delimiterInStr && 1 != delimiterInStr.length()) {
throw DataXException.asDataXException(
UnstructuredStorageReaderErrorCode.ILLEGAL_VALUE,
String.format("仅仅支持单字符切分, 您配置的切分为 : [%s]",
delimiterInStr));
}
UnstructuredStorageReaderUtil.validateCsvReaderConfig(this.originConfig);
}