diff --git a/lang/java/gradle-plugin/src/main/java/com/github/davidmc24/gradle/plugin/avro/SchemaResolver.java b/lang/java/gradle-plugin/src/main/java/com/github/davidmc24/gradle/plugin/avro/SchemaResolver.java index 59f60def7ea..9280f3135dc 100644 --- a/lang/java/gradle-plugin/src/main/java/com/github/davidmc24/gradle/plugin/avro/SchemaResolver.java +++ b/lang/java/gradle-plugin/src/main/java/com/github/davidmc24/gradle/plugin/avro/SchemaResolver.java @@ -6,14 +6,13 @@ import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.apache.avro.AvroRuntimeException; import org.apache.avro.Schema; -import org.apache.avro.SchemaParseException; import org.gradle.api.GradleException; import org.gradle.api.file.ProjectLayout; import org.gradle.api.logging.Logger; class SchemaResolver { - private static Pattern ERROR_UNKNOWN_TYPE = Pattern.compile("(?i).*(undefined name|not a defined name|type not supported).*"); private static Pattern ERROR_DUPLICATE_TYPE = Pattern.compile("Can't redefine: (.*)"); private final ProjectLayout projectLayout; @@ -58,15 +57,10 @@ private void processSchemaFile(ProcessingState processingState, FileState fileSt } else { logger.info("Processed {}", path); } - } catch (SchemaParseException ex) { + } catch (AvroRuntimeException ex) { String errorMessage = ex.getMessage(); - Matcher unknownTypeMatcher = ERROR_UNKNOWN_TYPE.matcher(errorMessage); Matcher duplicateTypeMatcher = ERROR_DUPLICATE_TYPE.matcher(errorMessage); - if (unknownTypeMatcher.matches()) { - fileState.setError(ex); - processingState.queueForDelayedProcessing(fileState); - logger.debug("Found undefined name in {} ({}); will try again", path, errorMessage); - } else if (duplicateTypeMatcher.matches()) { + if (duplicateTypeMatcher.matches()) { String typeName = duplicateTypeMatcher.group(1); if (fileState.containsDuplicateTypeName(typeName)) { throw new GradleException( @@ -79,7 +73,9 @@ private void processSchemaFile(ProcessingState processingState, FileState fileSt logger.debug("Identified duplicate type {} in {}; will re-process excluding it", typeName, path); } } else { - throw new GradleException(String.format("Failed to resolve schema definition file %s", path), ex); + fileState.setError(ex); + processingState.queueForDelayedProcessing(fileState); + logger.debug("Found error in {} ({}); will try again", path, errorMessage); } } catch (IOException ex) { throw new GradleException(String.format("Failed to resolve schema definition file %s", path), ex);