5

not sure whats going on, the full error is:

Problem with i/o No serializer found for class org.json.JSONObject and no properties        discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) )

I am trying to send a PUT request to a RESTful service. I am parsing a POST And sending modified key/value pairs for 'ID' and 'enabled' for the PUT.

@Test(dependsOnMethods= {"Post"})
public void Put() throws IOException  {

logger.logTestActivity("Testing FORM data POST using Excel file");
requestBuilder = new RequestSpecBuilder();

String jsonString = "";
boolean enabledModify = false;

try {
 BufferedReader in = new BufferedReader(new FileReader(
 xmlTest.getParameter("json-post")));

String str;

while ((str = in.readLine()) != null) {
      jsonString += str;
        }

JSONObject jsonObjPut = new JSONObject(jsonString);
jsonObjPut.put("_id", createUserId);
jsonObjPut.put("enabled",enabledModify);

    System.out.println(jsonObjPut.toString());
in.close();

    requestBuilder.setContentType(ContentType.JSON);
    requestSpecification = requestBuilder.build();
    responseBuilder.expectStatusCode(Integer.parseInt(xmlTest
    .getParameter("http-status-code-200")));
    responseBuilder.expectContentType(ContentType.JSON);
    responseSpecification = responseBuilder.build();    
System.out.println(createUserId);

String responseJson = given().body(jsonObjPut).         
when().put("/" + createUserId).asString();

    System.out.println(responseJson);

logger.logTestActivity("Finished testing FORM data POST using Excel file");
} catch (AssertionError e ) {
  logger.logTestActivity(
        "Error testing FORM data post: " + e.getMessage(),logger.ERROR);

      System.out.println("REST URL: " + RestAssured.baseURI + " "
                + RestAssured.port + " " + RestAssured.basePath );
  Assert.fail("Error testing FORM data POST: " + e.getMessage());
        throw e;
} catch (IOException | JSONException e) {
   System.out.println("Problem with i/o" + e.getMessage()); 
    }
}

createUserID is a global variable that is the ID parsed from the POST.

JSON file that is getting parsed looks like this:

{
"enabled" : false,
"_id" : "fdse332a-22432d-4432b"
}

In a before test method I am setting up the restassured with all the appropriate url endpoints...

Also, the PUT is also failing, with a NULLPointerException Error. That may be another post in the future!

2 Answers2

11

Solution: I was not converting my JSON object to a string when passing to restassured.

String responseJson = given().body(jsonObjPut.toString).

This did the trick. I now modify my existing json with generated ID and do a successful PUT on the RESTful service.

Bucket
  • 7,415
  • 9
  • 35
  • 45
  • 3
    You just saved a life. Spent hours banging my head on this. When i debugged, the JSONObject was being formed and i could see through the debugger that the JSON string was being formed, but it kept on throwing that cursed Exception. Never knew that you had to explicitly set toString() it for use. – Kermit_ice_tea Sep 25 '14 at 23:07
0

I was also facing same issue with java Spring rest Api. It was throwing BeanSerializerExcption. Use JsonNODE class instead of JSONObject.

ketankk
  • 2,578
  • 1
  • 29
  • 27