Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Exception in thread "main" java.lang.NoClassDefFoundError: com/fasterxml/jackson/annotation/JsonAutoDetect Error when trying to convert json to POJO

Tags:

I need to convert a json to a POJO, I have decided to go for the JACKSON library for that, I have added jackson-databind-2.2.3.jar and jackson-core-2.0.6.jar to my path and then have created the following classes:

1- Data-binding class :

package Distributed;  import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.ObjectMapper;  public class DataBinding {   public static void main(String[] args) throws JsonParseException, JsonMappingException, MalformedURLException, IOException {         String url = "http://frstmwarwebsrv.orsyptst.com:9000/duobject?searchString=TSK(ZTA010OU05)(000)&filtercheck=nameSWF&p.index=0&p.size=8";         ObjectMapper mapper = new ObjectMapper();         mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);         DuObject duobject = mapper.readValue(new URL(url), DuObject.class);         Dataset[] datasets = duobject.getDataset();         for (Dataset dataset : datasets) {             System.out.println(dataset.getName());         }     }   } 

2- Dataset class :

package Distributed;  import java.util.HashMap; import java.util.Map;    public class Dataset {  private String id, name; private Map<String , Object> otherProperties = new HashMap<String , Object>();    public String getId() {     return id; } public void setId(String id) {     this.id = id; } public String getName() {     return name; } public void setName(String name) {     this.name = name; }  public Object get(String name) {     return otherProperties.get(name); }  } 

3- DuObject class :

package Distributed;  public class DuObject {  private String name; public String getName() {     return name; } public void setName(String name) {     this.name = name; } public Dataset[] getDataset() {     return dataset; } public void setDataset(Dataset[] dataset) {     this.dataset = dataset; } private Dataset[] dataset;  } 

Here is my json object when launching teh URL used :

 { "facets": { "application": [   {     "name": "u_",     "distribution": 2   } ], "node": [   {     "name": "frstlwardu03_05",     "distribution": 2   } ], "area": [   {     "name": "x",     "distribution": 2   } ], "company": [   {     "name": "war001",     "distribution": 2   } ]  }, "duObjects": [ {   "id": "TASK|TSK(ZTA010OU05)(000)|ZECPFICO00",   "name": "TSK(ZTA010OU05)(000)",   "mu": "ZECPFICO00",   "label": "",   "uprocHeader": "ZTA010OU05|000",   "uprocHeaderLabel": "Uproc Tech Planif ne pas supprimer tous les jours f\u00c3\u00a9ri\u00c3\u00a9s",   "uprocHeaderType": "CL_INT",   "domain": "I",   "domainLabel": "Internal Activities",   "application": "U_",   "applicationLabel": "DU",   "highlightResult": {     "name": "name",     "word": "TSK"   } }, {   "id": "TASK|TSK(ZTA010OU05)(000)|ZECPSDA000",   "name": "TSK(ZTA010OU05)(000)",   "mu": "ZECPSDA000",   "label": "",   "uprocHeader": "ZTA010OU05|000",   "uprocHeaderLabel": "Uproc Tech Planif ne pas supprimer tous les jours f\u00c3\u00a9ri\u00c3\u00a9s",   "uprocHeaderType": "CL_INT",   "domain": "I",   "domainLabel": "Internal Activities",   "application": "U_",   "applicationLabel": "DU",   "highlightResult": {     "name": "name",     "word": "TSK"   } } ], "totalCount": 2, "pageSize": 10, "pageCurrent": 1, "pageNb": 1 } 

What I want to do is to get DuObject.name and store it in a DataSet table; however when I run Databinding class I got the following error :

Exception in thread "main" java.lang.NoClassDefFoundError:     com/fasterxml/jackson/annotation/JsonAutoDetect at com.fasterxml.jackson.databind.introspect.VisibilityChecker$Std.<clinit>  (VisibilityChecker.java:172) at com.fasterxml.jackson.databind.ObjectMapper.<clinit>(ObjectMapper.java:193) at Distributed.DataBinding.main(DataBinding.java:16)   Caused by: java.lang.ClassNotFoundException:   com.fasterxml.jackson.annotation.JsonAutoDetect at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) ... 3 more 

I am a newbie to jackson livbrary and I have no clue why I am having this error.

Thanks in advance for your help.

After adding the annotation jar I am facing the following error :

Exception in thread "main" java.lang.NoSuchMethodError:      com.fasterxml.jackson.core.JsonFactory.createParser(Ljava/net/URL;)Lcom/fasterxml/jackson/core/JsonParser; at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2011) at Distributed.DataBinding.main(DataBinding.java:18) 

I have changed the three JARS to 2.1.2 version and the error I am getting now is :

    Exception in thread "main" java.lang.NullPointerException at Distributed.DataBinding.main(DataBinding.java:21) 

In fact the Dataset table is returning null, any idea why the data set doese not contain the json name field?

like image 734
Ziwdigforbugs Avatar asked Nov 08 '13 10:11

Ziwdigforbugs


People also ask

How to use jackson JsonParser?

In order to create a Jackson JsonParser you first need to create a JsonFactory . The JsonFactory is used to create JsonParser instances. The JsonFactory class contains several createParser() methods, each taking a different JSON source as parameter.

Why we use jackson dependency?

- jackson is quiet fast and is of low memory footprint and is suitable for large object graphs or systems. Clean JSON. - jackson creates a clean and compact JSON results which is easy to read. No Dependency.

What is jackson in API testing?

About Jackson API Jackson API is a high performance JSON processor for Java. We can perform serialization, deserialization , reading a JSON file, writing a JSON file and a lot more things using Jackson API. To use Jackson API, we need to add it in java project build path.

What does jackson do in java?

Jackson is one such Java Json library used for parsing and generating Json files. It has built in Object Mapper class which parses json files and deserializes it to custom java objects. It helps in generating json from java objects.


1 Answers

You have to add one jar : jackson-annotations-2.1.2.jar

You can download it from here

Edit:

Also , since you have array in your json it needs to be traversed :

    ObjectMapper mapper = new ObjectMapper();     mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);     JsonNode node = mapper.readTree(new URL(url));     node = node.get("duObjects");      TypeReference<List<Dataset>> typeRef = new TypeReference<List<Dataset>>() {     };     List<Dataset> list = mapper.readValue(node.traverse(), typeRef);     for (int i = 0; i < list.size(); i++) {         Dataset dataSet = list.get(i);         System.out.println(dataSet.getName());     } 
like image 59
Jhanvi Avatar answered Sep 28 '22 04:09

Jhanvi