Hi Rajeenthini,
On Wed, Feb 3, 2016 at 9:19 AM, Rajeenthini Satkunam <[email protected]> wrote: > HI All, > > Thank you chamara and sajith for your valuable suggestions.I have done the > improvement in Jaggery to log the java Object. > > improvement > ----------------- > 1) > https://github.com/wso2/jaggery/blob/master/components/script-engine/org.jaggeryjs.scriptengine/src/main/java/org/jaggeryjs/scriptengine/util/HostObjectUtil.java#L78 > > Added new code segment as per sajith's suggestion > > try{ > return (new ObjectMapper().writeValueAsString(obj)); > }catch (Exception e){ > log.debug("Object " + obj.toString() + " of class " + obj.getClass() + " > cannot be converted to JSON"); > } > > return "{}"; > > > 2) https://github.com/wso2/jaggery/blob/master/pom.xml > > Added maven dependencies for Jackson data-bind and annotations > > <dependency> > <groupId>com.fasterxml.jackson.core</groupId> > <artifactId>jackson-annotations</artifactId> > <version>${jackson.version}</version> > </dependency> > <dependency> > <groupId>com.fasterxml.jackson.core</groupId> > <artifactId>jackson-databind</artifactId> > <version>${jackson.version}</version> > </dependency> > > 3) > https://github.com/wso2/jaggery/blob/master/components/script-engine/org.jaggeryjs.scriptengine/pom.xml > > Added maven dependencies for Jackson data-bind and annotations > > > I have tried to build(mvn clean install) Jaggery and product-Jaggery > respectively.I can build Jaggery successfully But It has failed when > building product Jaggery at Jaggery - Profile Generation. > > As per offline discussion with Niranjan I have added <importBundleDef> > and <*dependency*> for Jackson data-bind and annotation in POM.xml[ > https://github.com/wso2/jaggery/blob/master/features/org.jaggeryjs.server.feature/pom.xml] > file as below. > > <importBundleDef>com.fasterxml.jackson.core:jackson-databind</importBundleDef> > <importBundleDef>com.fasterxml.jackson.core:jackson-annotations</importBundleDef> > > > <dependency> > <groupId>com.fasterxml.jackson.core</groupId> > <artifactId>jackson-databind</artifactId> > </dependency> > <dependency> > <groupId>com.fasterxml.jackson.core</groupId> > <artifactId>jackson-annotations</artifactId> > </dependency> > > > But Still I am getting product Jaggery build fail at the point Jaggery - > Profile Generation,following error can be observe in the command line. > > > Installation failed.Cannot complete the install because one or more required > items could not be found. > > Software being installed: uuid Module - Feature 1.4.3 > (org.jaggeryjs.modules.uuid.feature.group 1.4.3) > Missing requirement: jackson-databind 2.0.0 (jackson-databind 2.0.0) > requires 'package com.fasterxml.jackson.core [2.0.0,3.0.0)' but it could not > be found > Cannot satisfy dependency: > From: org.jaggeryjs.modules.uuid 1.4.3 (org.jaggeryjs.modules.uuid 1.4.3) > To: package org.jaggeryjs.scriptengine.exceptions [0.11.0,1.0.0) > Cannot satisfy dependency: > > From: uuid Module - Feature 1.4.3 (org.jaggeryjs.modules.uuid.feature.group > 1.4.3) > To: org.jaggeryjs.modules.uuid [1.4.3] > Cannot satisfy dependency: > From: org.jaggeryjs.scriptengine 0.12.1.SNAPSHOT > (org.jaggeryjs.scriptengine 0.12.1.SNAPSHOT) > To: package com.fasterxml.jackson.databind [2.0.0,3.0.0) > Application failed, log file location: > /home/rajee/.m2/repository/org/eclipse/tycho/tycho-p2-runtime/0.13.0/eclipse/configuration/1454469448601.log > > > Can anyone help me to figure out the cause of build fail.Hope I have included > all the steps I have followed.Your help would be appreciated. > > As per the error, the build is failing because jackson-databind requires com.fasterxml.jackson.core within the range 2.0.0 and 3.0.0. If this is required by the feature then you need to bundle it in the feature. Shall we have a look at this today? > > > > On Tue, Feb 2, 2016 at 10:23 AM, Rajeenthini Satkunam < > [email protected]> wrote: > >> Hi sajith, >> >> Noted and thank you for the suggestions. >> >> On Mon, Feb 1, 2016 at 11:53 PM, Sajith Ariyarathna <[email protected]> >> wrote: >> >>> Hi Rajeenthini, >>> >>> You are hoping to add the following code snippet to the serializeJSON >>> method [1] of the org.jaggeryjs.scriptengine.util.HostObjectUtil class. >>> >>>> String JsonString = null; >>>> try{ >>>> ObjectMapper mapper = new ObjectMapper(); >>>> JsonString = mapper.writeValueAsString(obj); >>>> }catch (Exception e){ >>>> System.out.println(e.getMessage()); >>>> } >>>> >>>> return "{\"javaObject\":\"true\",\"object\":\"" + JsonString + "\"}"; >>>> >>>> There are few issue in this code snippet. >>> >>> - Don't catch generic Exception, always catch a specific exception. >>> In here you should catch JsonProcessingException [2]. >>> - Don't use System.out.println to log exceptions. Instead use a >>> proper logger. HostObjectUtil class has a log object defined in line >>> 30 [3], you can use that. >>> - Returning '{"javaObject": "true", "object": "{ ... }"}' string >>> gives a wrong impression that there are two attributes called >>> 'javaObject' >>> & 'object' in the logged object. I think just returning the JSON string >>> will be enough. >>> >>> After corrections (I also took the liberty to reduce no of lines): >>> >>> try { >>> >>> return (new ObjectMapper()).writeValueAsString(obj); >>> >>> } catch (JsonProcessingException e) { >>> >>> log.debug("Object " + obj.toString() + " of class " + obj.getClassName() >>> + " cannot be converted to JSON"); >>> >>> } >>> >>> return "{}"; >>> >>> >>> [1] >>> https://github.com/wso2/jaggery/blob/master/components/script-engine/org.jaggeryjs.scriptengine/src/main/java/org/jaggeryjs/scriptengine/util/HostObjectUtil.java#L78 >>> [2] >>> https://static.javadoc.io/com.fasterxml.jackson.core/jackson-databind/2.6.3/com/fasterxml/jackson/databind/ObjectMapper.html#writeValueAsString(java.lang.Object) >>> [3] >>> https://github.com/wso2/jaggery/blob/master/components/script-engine/org.jaggeryjs.scriptengine/src/main/java/org/jaggeryjs/scriptengine/util/HostObjectUtil.java#L30 >>> >>> Thanks. >>> >>> >>> On Mon, Feb 1, 2016 at 8:13 PM, Rajeenthini Satkunam < >>> [email protected]> wrote: >>> >>>> Hi sajith, >>>> >>>> i have added this Student class for example.As for current >>>> implementation goes like this way in Jaggery below. >>>> >>>> public static String serializeJSON(Object obj) { >>>> if (obj instanceof Wrapper) { >>>> obj = ((Wrapper) obj).unwrap(); >>>> } >>>> if (obj == null) { >>>> return "null"; >>>> } >>>> if (obj instanceof Undefined) { >>>> return "null"; >>>> } >>>> if (obj instanceof Boolean) { >>>> return Boolean.toString((Boolean) obj); >>>> } >>>> if (obj instanceof String) { >>>> return serializeString((String) obj); >>>> } >>>> if (obj instanceof ConsString) { >>>> return serializeString(obj.toString()); >>>> } >>>> if (obj instanceof Number) { >>>> return obj.toString(); >>>> } >>>> if (obj instanceof XMLObject) { >>>> return serializeString(serializeXML((ScriptableObject) obj)); >>>> } >>>> if (obj instanceof NativeObject) { >>>> return serializeNativeObject((NativeObject) obj); >>>> } >>>> if (obj instanceof NativeArray) { >>>> return serializeNativeArray((NativeArray) obj); >>>> } >>>> if (obj instanceof Object[]) { >>>> return serializeObjectArray((Object[]) obj); >>>> } >>>> if (obj instanceof Scriptable) { >>>> Scriptable object = (Scriptable) obj; >>>> String jsClass = object.getClassName(); >>>> if ("Date".equals(jsClass)) { >>>> return serializeString(serializeNativeDate(object)); >>>> } else if ("Error".equals(jsClass)) { >>>> return serializeString(serializeNativeError(object)); >>>> } >>>> } >>>> String JsonString = null; >>>> try{ >>>> ObjectMapper mapper = new ObjectMapper(); >>>> JsonString = mapper.writeValueAsString(obj); >>>> }catch (Exception e){ >>>> System.out.println(e.getMessage()); >>>> } >>>> >>>> return "{\"javaObject\":\"true\",\"object\":\"" + JsonString + "\"}"; >>>> } >>>> >>>> AFAIU since we are parsing Object type of argument It is better we can >>>> use ObjectMapper.Correct me If I am wrong.Your suggestion would be more >>>> appreciated. >>>> >>>> On Sun, Jan 31, 2016 at 10:23 AM, Sajith Ariyarathna <[email protected] >>>> > wrote: >>>> >>>>> Hi Rajeenthini, >>>>> >>>>> AFAIK ability to convert a POJO into JSON object does nor affect the >>>>> output of a Jaggery Log of that POJO. >>>>> To get a proper log output for a Java object, you need to implement >>>>> the "toString" method in that Java class. For example in your case, >>>>> >>>>> public class Student { >>>>> >>>>> ... >>>>> >>>>> public String toString() { >>>>> >>>>> return "{name: " + this.name + ", age: " + this.age + ", indexNo: " + >>>>> this.indexNo + "}"; >>>>> >>>>> } >>>>> >>>>> } >>>>> >>>>> Now you can log a Student object in your Jaggery code as following. >>>>> >>>>> log.info(studentObj.toString()); >>>>> >>>>> >>>>> Thanks. >>>>> >>>>> >>>>> >>>>> On Sat, Jan 30, 2016 at 9:28 PM, Rajeenthini Satkunam < >>>>> [email protected]> wrote: >>>>> >>>>>> Hi, >>>>>> >>>>>> I have worked on writing Jaggery test for Jaggery-Product.I can >>>>>> observe when we tried to log the object it always gives us empty JSON >>>>>> ({}).Currently the implementation goes this way when we try to log java >>>>>> object. >>>>>> >>>>>> So I was trying to get rid of this observed behavior of Jaggery.I >>>>>> have gone through a solution. >>>>>> >>>>>> *using Jackson[1] * >>>>>> >>>>>> We can convert java object to JSON[2] and can log it. >>>>>> >>>>>> I have shared the piece of code I have tried out with Jackson below. >>>>>> >>>>>> *Simple POJO Student class* >>>>>> >>>>>> public class Student { >>>>>> private int age; >>>>>> private String name; >>>>>> private String indexNo; >>>>>> >>>>>> public int getAge() { >>>>>> return age; >>>>>> } >>>>>> >>>>>> public void setAge(int age) { >>>>>> this.age = age; >>>>>> } >>>>>> >>>>>> public String getName() { >>>>>> return name; >>>>>> } >>>>>> >>>>>> public void setName(String name) { >>>>>> this.name = name; >>>>>> } >>>>>> >>>>>> public String getIndexNo() { >>>>>> return indexNo; >>>>>> } >>>>>> >>>>>> public void setIndexNo(String indexNo) { >>>>>> this.indexNo = indexNo; >>>>>> } >>>>>> } >>>>>> >>>>>> *Simple class to test Jackson* >>>>>> >>>>>> import com.fasterxml.jackson.databind.ObjectMapper; >>>>>> import util.Student; >>>>>> public class MyTest { >>>>>> public static void main(String args[]){ >>>>>> Student st = new Student(); >>>>>> st.setIndexNo("DS001"); >>>>>> st.setAge(12); >>>>>> st.setName("kareena"); >>>>>> try{ >>>>>> ObjectMapper mapper = new ObjectMapper(); >>>>>> String jsonInString = mapper.writeValueAsString(st); >>>>>> >>>>>> System.out.println("************************************************"); >>>>>> System.out.println(jsonInString); >>>>>> >>>>>> System.out.println("************************************************"); >>>>>> >>>>>> }catch(Exception e){ >>>>>> System.out.print("Exception caught "+ e); >>>>>> } >>>>>> >>>>>> } >>>>>> } >>>>>> >>>>>> Actual output by above code. >>>>>> ************************************************ >>>>>> {"age":12,"name":"kareena","indexNo":"DS001"} >>>>>> ************************************************ >>>>>> >>>>>> I have added a dependency in the POM.xml >>>>>> >>>>>> <dependency> >>>>>> <groupId>com.fasterxml.jackson.core</groupId> >>>>>> <artifactId>jackson-databind</artifactId> >>>>>> <version>2.6.3</version> >>>>>> </dependency> >>>>>> >>>>>> >>>>>> IMHO we can use the same scenario in case of log JAVA object.Your >>>>>> help and suggestions are more appreciated and guide me if I am wrong or I >>>>>> can have better solution than this. >>>>>> >>>>>> [1] - https://github.com/FasterXML/jackson-databind >>>>>> [2] - >>>>>> http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/ >>>>>> -- >>>>>> >>>>>> *Thank You.* >>>>>> >>>>>> *Rajeenthini Satkunam* >>>>>> >>>>>> *Associate Software Engineer | WSO2* >>>>>> >>>>>> >>>>>> *E:[email protected] <[email protected]>* >>>>>> >>>>>> *M :+94770832823 <%2B94770832823> * >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> Dev mailing list >>>>>> [email protected] >>>>>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>>>>> >>>>>> >>>>> >>>>> >>>>> -- >>>>> Sajith Ariyarathna >>>>> Software Engineer; WSO2, Inc.; http://wso2.com/ >>>>> mobile: +94 77 6602284, +94 71 3951048 >>>>> >>>> >>>> >>>> >>>> -- >>>> >>>> *Thank You.* >>>> >>>> *Rajeenthini Satkunam* >>>> >>>> *Associate Software Engineer | WSO2* >>>> >>>> >>>> *E:[email protected] <[email protected]>* >>>> >>>> *M :+94770832823 <%2B94770832823> * >>>> >>>> >>> >>> >>> -- >>> Sajith Ariyarathna >>> Software Engineer; WSO2, Inc.; http://wso2.com/ >>> >> >> >> >> -- >> >> *Thank You.* >> >> *Rajeenthini Satkunam* >> >> *Associate Software Engineer | WSO2* >> >> >> *E:[email protected] <[email protected]>* >> >> *M :+94770832823 <%2B94770832823> * >> >> > > > -- > > *Thank You.* > > *Rajeenthini Satkunam* > > *Associate Software Engineer | WSO2* > > > *E:[email protected] <[email protected]>* > > *M :+94770832823 <%2B94770832823> * > > Regards, Nira -- *Niranjan Karunanandham* Senior Software Engineer - WSO2 Inc. WSO2 Inc.: http://www.wso2.com
_______________________________________________ Dev mailing list [email protected] http://wso2.org/cgi-bin/mailman/listinfo/dev
