Skip to content

Commit c6ee51b

Browse files
authored
Convert some codegen exceptions to ModelInvalidException (#6274)
* Convert exceptions to validation errors * Add changelog * Update validation message
1 parent 24ae3a7 commit c6ee51b

File tree

5 files changed

+55
-16
lines changed

5 files changed

+55
-16
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "feature",
3+
"category": "AWS SDK for Java v2",
4+
"contributor": "",
5+
"description": "Convert codegen exceptions caused by bad customization config or invalid models to ModelInvalidException."
6+
}

codegen/src/main/java/software/amazon/awssdk/codegen/naming/DefaultNamingStrategy.java

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,12 @@
4343
import software.amazon.awssdk.codegen.model.intermediate.Metadata;
4444
import software.amazon.awssdk.codegen.model.service.ServiceModel;
4545
import software.amazon.awssdk.codegen.model.service.Shape;
46+
import software.amazon.awssdk.codegen.validation.ModelInvalidException;
47+
import software.amazon.awssdk.codegen.validation.ValidationEntry;
48+
import software.amazon.awssdk.codegen.validation.ValidationErrorId;
49+
import software.amazon.awssdk.codegen.validation.ValidationErrorSeverity;
4650
import software.amazon.awssdk.utils.Logger;
4751
import software.amazon.awssdk.utils.StringUtils;
48-
import software.amazon.awssdk.utils.Validate;
4952

5053
/**
5154
* Default implementation of naming strategy respecting.
@@ -498,17 +501,35 @@ private void validateCustomerVisibleName(String name, String location) {
498501
UnderscoresInNameBehavior behavior = customizationConfig.getUnderscoresInNameBehavior();
499502

500503
String supportedBehaviors = Arrays.toString(UnderscoresInNameBehavior.values());
501-
Validate.notNull(behavior,
502-
"Encountered a name or identifier that the customer will see (%s in the %s) with an underscore. "
503-
+ "This isn't idiomatic in Java. Please either remove the underscores or apply the "
504-
+ "'underscoresInNameBehavior' customization for this service (Supported "
505-
+ "'underscoresInNameBehavior' values: %s).", name, location, supportedBehaviors);
506-
Validate.isTrue(behavior == UnderscoresInNameBehavior.ALLOW,
507-
"Unsupported underscoresInShapeNameBehavior: %s. Supported values: %s", behavior, supportedBehaviors);
504+
if (behavior == null) {
505+
throw ModelInvalidException.fromEntry(ValidationEntry.create(
506+
ValidationErrorId.INVALID_IDENTIFIER_NAME,
507+
ValidationErrorSeverity.DANGER,
508+
String.format(
509+
"Encountered a name or identifier that the customer will see (%s in the %s) with an underscore. "
510+
+ "This isn't idiomatic in Java. Please either remove the underscores",
511+
name, location, supportedBehaviors)
512+
));
513+
}
514+
if (behavior != UnderscoresInNameBehavior.ALLOW) {
515+
throw ModelInvalidException.fromEntry(ValidationEntry.create(
516+
ValidationErrorId.INVALID_CODEGEN_CUSTOMIZATION,
517+
ValidationErrorSeverity.DANGER,
518+
String.format(
519+
"Unsupported underscoresInShapeNameBehavior: %s. Supported values: %s",
520+
behavior, supportedBehaviors)
521+
));
522+
}
508523
}
509524

510-
Validate.isTrue(VALID_IDENTIFIER_NAME.matcher(name).matches(),
511-
"Encountered a name or identifier that is invalid within Java (%s in %s). Please remove invalid "
512-
+ "characters.", name, location);
525+
if (!VALID_IDENTIFIER_NAME.matcher(name).matches()) {
526+
throw ModelInvalidException.fromEntry(ValidationEntry.create(
527+
ValidationErrorId.INVALID_IDENTIFIER_NAME,
528+
ValidationErrorSeverity.DANGER,
529+
String.format(
530+
"Encountered a name or identifier that is invalid within Java (%s in %s). Please remove invalid "
531+
+ "characters.", name, location)
532+
));
533+
}
513534
}
514535
}

codegen/src/main/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpec.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@
3434
import software.amazon.awssdk.codegen.poet.ClassSpec;
3535
import software.amazon.awssdk.codegen.poet.PoetExtension;
3636
import software.amazon.awssdk.codegen.poet.model.TypeProvider;
37+
import software.amazon.awssdk.codegen.validation.ModelInvalidException;
38+
import software.amazon.awssdk.codegen.validation.ValidationEntry;
39+
import software.amazon.awssdk.codegen.validation.ValidationErrorId;
40+
import software.amazon.awssdk.codegen.validation.ValidationErrorSeverity;
3741
import software.amazon.awssdk.core.util.PaginatorUtils;
3842

3943
public abstract class PaginatorsClassSpec implements ClassSpec {
@@ -64,7 +68,12 @@ public PaginatorsClassSpec(IntermediateModel model, String c2jOperationName, Pag
6468
this.typeProvider = new TypeProvider(model);
6569
this.operationModel = model.getOperation(c2jOperationName);
6670
if (operationModel == null) {
67-
throw new IllegalArgumentException("The service model does not model an operation '" + c2jOperationName + "'");
71+
throw ModelInvalidException.fromEntry(ValidationEntry.create(
72+
ValidationErrorId.UNKNOWN_OPERATION,
73+
ValidationErrorSeverity.DANGER,
74+
"Invalid paginator definition - The service model does not model the referenced operation '" +
75+
c2jOperationName + "'"
76+
));
6877
}
6978
this.paginationDocs = new PaginationDocs(model, operationModel, paginatorDefinition);
7079
}

codegen/src/main/java/software/amazon/awssdk/codegen/validation/ValidationErrorId.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,9 @@ public enum ValidationErrorId {
2424
REQUEST_URI_NOT_FOUND("The request URI does not exist."),
2525

2626
INVALID_CODEGEN_CUSTOMIZATION("A customization is enabled for this service that cannot be applied for the given service "
27-
+ "model.")
28-
;
27+
+ "model."),
28+
UNKNOWN_OPERATION("The model references an unknown operation."),
29+
INVALID_IDENTIFIER_NAME("The model contains an invalid or non-idiomatic name or identifier.");
2930

3031
private final String description;
3132

codegen/src/test/java/software/amazon/awssdk/codegen/poet/paginators/PaginatorsClassSpecTest.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,17 @@
2323
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
2424
import software.amazon.awssdk.codegen.model.service.PaginatorDefinition;
2525
import software.amazon.awssdk.codegen.poet.ClientTestModels;
26+
import software.amazon.awssdk.codegen.validation.ModelInvalidException;
2627

2728
public class PaginatorsClassSpecTest {
2829
@Test
2930
public void constructor_unknownOperationName_throws() {
3031
assertThatThrownBy(() -> new TestPaginatorSpec(ClientTestModels.awsJsonServiceModels(),
3132
"~~DoesNotExist",
3233
new PaginatorDefinition()))
33-
.isInstanceOf(IllegalArgumentException.class)
34-
.hasMessageContaining("The service model does not model an operation '~~DoesNotExist'");
34+
.isInstanceOf(ModelInvalidException.class)
35+
.hasMessageContaining("Invalid paginator definition - "
36+
+ "The service model does not model the referenced operation '~~DoesNotExist'");
3537
}
3638

3739
private static class TestPaginatorSpec extends PaginatorsClassSpec {

0 commit comments

Comments
 (0)