Skip to content

Commit 804b06d

Browse files
authored
fix: Provide info on file name when Json parsing fails (#10423) (#10548)
Adds the package file name to exception message in case of JsonException in order to provide clean explanation where to look into. Fixes #10323 (cherry picked from commit 1ea4cef)
1 parent 15374f1 commit 804b06d

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

flow-server/src/main/java/com/vaadin/flow/server/frontend/NodeUpdater.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
import com.vaadin.flow.server.frontend.scanner.FrontendDependenciesScanner;
3838

3939
import elemental.json.Json;
40+
import elemental.json.JsonException;
4041
import elemental.json.JsonObject;
4142
import elemental.json.JsonValue;
4243

@@ -206,7 +207,12 @@ static JsonObject getJsonFileContent(File packageFile) throws IOException {
206207
if (packageFile.exists()) {
207208
String fileContent = FileUtils.readFileToString(packageFile,
208209
UTF_8.name());
209-
jsonContent = Json.parse(fileContent);
210+
try {
211+
jsonContent = Json.parse(fileContent);
212+
} catch (JsonException e) {
213+
throw new JsonException(String.format(
214+
"Cannot parse package file '%s'", packageFile));
215+
}
210216
}
211217
return jsonContent;
212218
}

flow-server/src/test/java/com/vaadin/flow/server/frontend/NodeUpdaterTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
import java.util.stream.Collectors;
2323
import java.util.stream.Stream;
2424

25+
import org.apache.commons.io.FileUtils;
26+
import org.hamcrest.MatcherAssert;
27+
import org.hamcrest.core.StringContains;
2528
import org.junit.Assert;
2629
import org.junit.Before;
2730
import org.junit.Rule;
@@ -33,9 +36,11 @@
3336
import com.vaadin.flow.server.frontend.scanner.FrontendDependencies;
3437

3538
import elemental.json.Json;
39+
import elemental.json.JsonException;
3640
import elemental.json.JsonObject;
3741
import static com.vaadin.flow.server.Constants.COMPATIBILITY_RESOURCES_FRONTEND_DEFAULT;
3842
import static com.vaadin.flow.server.Constants.RESOURCES_FRONTEND_DEFAULT;
43+
import static java.nio.charset.StandardCharsets.UTF_8;
3944

4045
public class NodeUpdaterTest {
4146

@@ -188,6 +193,24 @@ public void updateDefaultDependencies_newerVersionsAreNotChanged()
188193
.getObject(NodeUpdater.DEV_DEPENDENCIES).getString("webpack"));
189194
}
190195

196+
@Test
197+
public void getJsonFileContent_incorrectPackageJsonContent_throwsExceptionWithFileName()
198+
throws IOException {
199+
File brokenPackageJsonFile = temporaryFolder
200+
.newFile("broken-package.json");
201+
FileUtils.writeStringToFile(brokenPackageJsonFile,
202+
"{ some broken json ", UTF_8);
203+
204+
JsonException exception = Assert.assertThrows(JsonException.class,
205+
() -> NodeUpdater.getJsonFileContent(brokenPackageJsonFile));
206+
207+
MatcherAssert.assertThat(exception.getMessage(),
208+
StringContains.containsString(
209+
"Cannot parse package file "));
210+
MatcherAssert.assertThat(exception.getMessage(),
211+
StringContains.containsString("broken-package.json"));
212+
}
213+
191214
private String getPolymerVersion(JsonObject object) {
192215
JsonObject deps = object.get("dependencies");
193216
String version = deps.getString("@polymer/polymer");

0 commit comments

Comments
 (0)