0

I can not use any third party library so I have mentioned in subject line. this line throwing exception. obj.put("CanonicalName", data.getItemname());

I have a list which is of EntityData type. EntityData is POJO which has 2 columns with getter setter and toString..

public class EntityData {

    private JsonValue itemname; //I can change datatype to String if it helps to reolve issue
    private String operation;
}

my list is List<EntityData> dataList= new ArrayList<EntityData>(); if I print sout(dataList) then below is my data. it calls toString.

[EntityData [itemname="Apple Computers", operation=add], EntityData [itemname="Infosys", operation=add], EntityData [itemname="Wipro", operation=add], EntityData [itemname="Google India", operation=update], EntityData [itemname="Amazon India", operation=update], EntityData [itemname="Capgemini", operation=add], EntityData [itemname="Cognizant", operation=add], EntityData [itemname="Cognizant", operation=delete]]

so file contains itemname and operation(add,delete,update). I need to write list data in below format.

    {
      "delete": [
        {
          "canonicalName": "TCS"
        }
      ],
      "update": [
        {
          "canonicalName": "Google India"
        },
        {
          "canonicalName": "Amazon India"
        }
      ],
      "add": [
        {
          "canonicalName": "Apple Computers"
        },
        {
          "canonicalName": "Infosys"
        },
        {
          "canonicalName": "Wipro"
        },
        {
          "canonicalName": "Capgemini"
        },
        {
          "canonicalName": "Cognizant"
        }
      ]
    }

I was writing below code but i am getting error.

JsonObject obj = JsonObject.EMPTY_JSON_OBJECT;
        
        JsonArray delete= JsonArray.EMPTY_JSON_ARRAY;
        JsonArray modify= JsonArray.EMPTY_JSON_ARRAY;
        JsonArray add= JsonArray.EMPTY_JSON_ARRAY;
        
        for(EntityData data:dataList)
        {
            switch(data.getOperation())
            {
            case "delete":
                obj.put("CanonicalName", data.getItemname() );
                delete.add(obj);
                break;
                
            case "update":
                obj.put("CanonicalName", data.getItemname() );
                modify.add(obj);
                break;
                
            case "add":
                obj.put("CanonicalName", data.getItemname() );
                add.add(obj);
                break;
                
            default:
                break;
            }
        }
        
        System.out.println(obj);

It is throwing below exception

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractMap.put(Unknown Source)
    at com.shruti.jdbc.ReadData.main(ReadData.java:86)
        

. I dont know how to handle it. I can not use any third party library. I have to use java libraries of oracle only. basically I dont know how to create object of JsonObject and insert data into it. If any other java library available pleas help.

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555

1 Answers1

0

Try to create new JsonObject when adding in JsonArray and create a root object to add 3 type of operation data array

    JsonArray delete= JsonArray.EMPTY_JSON_ARRAY;
    JsonArray modify= JsonArray.EMPTY_JSON_ARRAY;
    JsonArray add= JsonArray.EMPTY_JSON_ARRAY;
    
    for(EntityData data:dataList)
    {
        switch(data.getOperation())
        {
        case "delete":
            JsonObject obj1 = JsonObject.EMPTY_JSON_OBJECT; 
            obj1.put("CanonicalName", data.getItemname() );
            delete.add(obj1);
            break;
            
        case "update":
            JsonObject obj2 = JsonObject.EMPTY_JSON_OBJECT; 
            obj2.put("CanonicalName", data.getItemname() );
            modify.add(obj2);
            break;
            
        case "add":
            JsonObject obj3 = JsonObject.EMPTY_JSON_OBJECT; 
            obj3.put("CanonicalName", data.getItemname() );
            add.add(obj3);
            break;
            
        default:
            break;
        }
    }
    JsonObject rootObj = JsonObject.EMPTY_JSON_OBJECT; 
    rootObj.put("delete", delete);
    rootObj.put("update", modify);
    rootObj.put("add", add);
Eklavya
  • 17,618
  • 4
  • 28
  • 57
  • thanks ..but it is still giving same exception. Exception in thread "main" java.lang.UnsupportedOperationException at java.util.AbstractMap.put(Unknown Source) at com.shruti.jdbc.ReadData.main(ReadData.java:88) –  Aug 04 '20 at 22:15
  • I actually debug the code..this line is throwing exception. obj.put("CanonicalName", data.getItemname()); –  Aug 04 '20 at 22:22
  • Its done.. instead of Jsonobject and JsonArray I used JsonObjectBuilder and JsonArrayBuilder then it worked perfectly. JsonObject doesnt allow modification. its immutable. –  Aug 04 '20 at 23:06