Skip to content

Commit 01024eb

Browse files
committed
Ignore JARs without a Smithy manifest
This commit logs when a JAR is encountered with a missing manifest instead of throwing, allowing for libraries that bring in Smithy models to have dependencies on non-Smithy packages.
1 parent 40786bd commit 01024eb

4 files changed

Lines changed: 30 additions & 1 deletion

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"type": "feature",
3+
"description": "Ignore JARs without a Smithy manifest to allow Smithy model packages to have non-Smithy dependencies",
4+
"pull_requests": []
5+
}

smithy-model/src/main/java/software/amazon/smithy/model/loader/ModelLoader.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
*/
55
package software.amazon.smithy.model.loader;
66

7+
import java.io.FileNotFoundException;
78
import java.io.IOException;
89
import java.io.InputStream;
910
import java.net.URL;
1011
import java.net.URLConnection;
12+
import java.util.List;
1113
import java.util.Map;
1214
import java.util.function.Consumer;
1315
import java.util.function.Function;
@@ -118,7 +120,18 @@ private static void loadJar(
118120
URL manifestUrl = ModelDiscovery.createSmithyJarManifestUrl(filename);
119121
LOGGER.fine(() -> "Loading Smithy model imports from JAR: " + manifestUrl);
120122

121-
for (URL model : ModelDiscovery.findModels(manifestUrl)) {
123+
List<URL> models;
124+
try {
125+
models = ModelDiscovery.findModels(manifestUrl);
126+
} catch (ModelManifestException e) {
127+
if (e.getCause() instanceof FileNotFoundException) {
128+
LOGGER.info(() -> "Ignoring JAR without Smithy manifest: " + filename);
129+
return;
130+
}
131+
throw e;
132+
}
133+
134+
for (URL model : models) {
122135
try {
123136
URLConnection connection = model.openConnection();
124137

smithy-model/src/test/java/software/amazon/smithy/model/loader/ModelAssemblerTest.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1347,6 +1347,16 @@ public void failsOnInvalidJarJsonFile() throws URISyntaxException, IOException {
13471347
assertThat(e.getMessage(), containsString("Invalid file referenced by Smithy JAR manifest"));
13481348
}
13491349

1350+
@Test
1351+
public void ignoresJarWithoutSmithyManifest() throws URISyntaxException, IOException {
1352+
Path jar = JarUtils.createJarFromDir(
1353+
Paths.get(getClass().getResource("assembler-no-manifest-jar").toURI()));
1354+
1355+
ValidatedResult<Model> result = Model.assembler().addImport(jar).assemble();
1356+
1357+
assertFalse(result.isBroken());
1358+
}
1359+
13501360
@Test
13511361
public void doesNotThrowOnInvalidSuppression() {
13521362
ObjectNode node = Node.objectNode()
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Manifest-Version: 1.0

0 commit comments

Comments
 (0)