RestAssured: java.lang.IllegalArgumentException: Schema to use cannot be null?

Viewed 5794

I need to compare my api tests response against an external JSON file.

Seem to be seeing the following exception: 'java.lang.IllegalArgumentException: Schema to use cannot be null' when executing my api test.

My Test:

@Test
public void validateAgainstJsonFile() {
    given()
            .spec(footballCompetitions_requestSpecification)
            .when().get(EndPoint.AREAS + "2014")
            .then()
            .assertThat()
            .body(matchesJsonSchemaInClasspath("footballCompetitions.json"));
}

My projects structure looks like the following:

https://ibb.co/M62rHyF

Stack trace:

java.lang.IllegalArgumentException: Schema to use cannot be null

    at io.restassured.module.jsv.JsonSchemaValidator.validateSchemaIsNotNull(JsonSchemaValidator.java:270)
    at io.restassured.module.jsv.JsonSchemaValidator.access$300(JsonSchemaValidator.java:75)
    at io.restassured.module.jsv.JsonSchemaValidator$JsonSchemaValidatorFactory.create(JsonSchemaValidator.java:281)
    at io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchema(JsonSchemaValidator.java:166)
    at io.restassured.module.jsv.JsonSchemaValidator.matchesJsonSchemaInClasspath(JsonSchemaValidator.java:117)
    at apiTests.footballData.CompetitionsGetTest.validateAgainstJsonFile(CompetitionsGetTest.java:195)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:583)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:719)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:989)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:109)
    at org.testng.TestRunner.privateRun(TestRunner.java:648)
    at org.testng.TestRunner.run(TestRunner.java:505)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:455)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)
    at org.testng.SuiteRunner.run(SuiteRunner.java:364)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1137)
    at org.testng.TestNG.runSuites(TestNG.java:1049)
    at org.testng.TestNG.run(TestNG.java:1017)
    at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)
    at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
6 Answers

Try creating a folder under test called resources and moving there the file footballCompetitions.json something like: /test/resources/footballCompetitions.json

  test
    └───  java
    └───  resources
         └─── footballCompetitions.json

Then .body(matchesJsonSchemaInClasspath("footballCompetitions.json")); should work fine.

Are you sure that the file path is right? Move this file to: /test/resources/

or use absolute path like below: .body(matchesJsonSchemaInClasspath("/src/test/java/apitests/footballData/footballCompetitions.json"));

In my case, it was my mistake, i.e I did not save the file in the proper format. The file was saved as xyz.json.txt. Please ensure that the file is saved in the correct format. It will work.

Save json file in Resource Folder and it will work

enter image description here

String Jsonpaths="Examples.json";

assertThat(RESPONSEBODY,matchesJsonSchemaInClasspath(Jsonpaths));

Place the JSON-Schema file under Target classPath:

enter image description here

This error is related to your schema which you are inserting into

matchesJsonSchemaInClasspath()

First, try to check that your schema JSON may have some null value. You can remove those from the JSON schema file and can check it again.

Related