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

Reply via email to