Hi sajith, Noted and thank you for the suggestions.
On Mon, Feb 1, 2016 at 11:53 PM, Sajith Ariyarathna <sajit...@wso2.com> 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 <rajeenth...@wso2.com > > 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 <sajit...@wso2.com> >> 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 < >>> rajeenth...@wso2.com> 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:rajeenth...@wso2.com <rajeenth...@wso2.com>* >>>> >>>> *M :+94770832823 <%2B94770832823> * >>>> >>>> >>>> _______________________________________________ >>>> Dev mailing list >>>> Dev@wso2.org >>>> 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:rajeenth...@wso2.com <rajeenth...@wso2.com>* >> >> *M :+94770832823 <%2B94770832823> * >> >> > > > -- > Sajith Ariyarathna > Software Engineer; WSO2, Inc.; http://wso2.com/ > -- *Thank You.* *Rajeenthini Satkunam* *Associate Software Engineer | WSO2* *E:rajeenth...@wso2.com <rajeenth...@wso2.com>* *M :+94770832823 *
_______________________________________________ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev