public static RowFormatInfo getDataRowFormatInfo(
            DescriptorProperties descriptorProperties) {
        RowFormatInfo rowFormatInfo = deserializeRowFormatInfo(descriptorProperties);

        Set<String> fieldNames = new HashSet<>();
        Collections.addAll(fieldNames, rowFormatInfo.getFieldNames());

        String timeFieldName =
                descriptorProperties
                        .getOptionalString(FORMAT_TIME_FIELD_NAME)
                        .orElse(DEFAULT_TIME_FIELD_NAME);
        if (timeFieldName != null && fieldNames.contains(timeFieldName)) {
            throw new ValidationException("The name of the time field " + timeFieldName +
                    " conflicts with one of the data fields.");
        }

        String attributesFieldName =
                descriptorProperties
                        .getOptionalString(FORMAT_ATTRIBUTES_FIELD_NAME)
                        .orElse(DEFAULT_ATTRIBUTES_FIELD_NAME);
        if (attributesFieldName != null && fieldNames.contains(attributesFieldName)) {
            throw new ValidationException("The name of the attributes field " +
                    attributesFieldName + " conflicts with one of the data fields.");
        }

        return rowFormatInfo;
    }
A utility class for parsing InLongMsg {@link InLongMsg}.
inlong-sort/sort-formats/format-row/format-inlongmsg-base/src/main/java/org/apache/inlong/sort/formats/inlongmsg/row/InLongMsgUtils.java