com.epam.marshaller.jackson.JacksonMarshallerTest.java Source code

Java tutorial

Introduction

Here is the source code for com.epam.marshaller.jackson.JacksonMarshallerTest.java

Source

package com.epam.marshaller.jackson;

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationConfig;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.module.SimpleModule;
import org.junit.Assert;
import org.junit.Test;

import java.io.IOException;
import java.util.Collection;
import java.util.LinkedList;

/**
 * It is a test for Jackson marshaller.
 * Date: 10/12/12
 *
 * @author Andrei_Khadziukou
 */
public class JacksonMarshallerTest {

    @Test
    public void testMarshaller() throws IOException {
        ObjectMapper objectMapper = prepareObjectMapper();
        User user = prepareUser();

        String userJson = objectMapper.writeValueAsString(user);
        print(userJson);

        User unmarshalledUser = objectMapper.readValue(userJson, User.class);

        Assert.assertEquals(user, unmarshalledUser);
    }

    private ObjectMapper prepareObjectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.disable(MapperFeature.AUTO_DETECT_GETTERS);
        objectMapper.disable(MapperFeature.AUTO_DETECT_IS_GETTERS);
        objectMapper.disable(MapperFeature.USE_GETTERS_AS_SETTERS);
        objectMapper.disable(MapperFeature.AUTO_DETECT_SETTERS);
        objectMapper.enable(MapperFeature.AUTO_DETECT_FIELDS);
        objectMapper.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY);
        objectMapper.setVisibility(PropertyAccessor.SETTER, JsonAutoDetect.Visibility.NONE);
        objectMapper.setVisibility(PropertyAccessor.GETTER, JsonAutoDetect.Visibility.NONE);
        objectMapper.setVisibility(PropertyAccessor.IS_GETTER, JsonAutoDetect.Visibility.NONE);

        return objectMapper;
    }

    private User prepareUser() {
        User user = new User();
        user.setName("Frank");
        user.setHasDriveLicense(true);
        user.setXXFriends(new LinkedList<User>());

        return user;
    }

    private void print(String s) {
        System.out.println(s);
    }

    private static class User {
        private boolean hasDriveLicense;

        //@Deprecated
        //private String fakeField;
        private String name;
        private Collection<User> friends;

        public Collection<User> getFriends() {
            print("Getters for friends");
            return friends;
        }

        //public void setFriends(Collection<User> friends) {
        //  print("Setter for friends");
        //this.friends = friends;
        //}

        public void setXXFriends(Collection<User> friends) {
            print("XXXSetter for friends");
            this.friends = friends;
        }

        public boolean isHasDriveLicense() {
            print("Getters for hasDriveLicense");
            return hasDriveLicense;
        }

        private void print(String s) {
            System.out.println(s);
        }

        public void setHasDriveLicense(boolean hasDriveLicense) {
            print("Setters for hasDriveLicense");
            this.hasDriveLicense = hasDriveLicense;
        }

        public String getName() {
            print("Getters for name");
            return name;
        }

        public void setName(String name) {
            print("Setter for name");
            this.name = name;
        }

        public String getFakeField() {
            print("getFakeField");
            return null;
            //return fakeField;
        }

        public void setFakeField(String fakeField) {
            print("setFakeField");
            //this.fakeField = fakeField;
        }

        @Override
        public boolean equals(Object o) {
            if (this == o)
                return true;
            if (o == null || getClass() != o.getClass())
                return false;

            User user = (User) o;

            if (hasDriveLicense != user.hasDriveLicense)
                return false;
            if (friends != null ? !friends.equals(user.friends) : user.friends != null)
                return false;
            if (name != null ? !name.equals(user.name) : user.name != null)
                return false;

            return true;
        }

        @Override
        public int hashCode() {
            int result = (hasDriveLicense ? 1 : 0);
            result = 31 * result + (name != null ? name.hashCode() : 0);
            result = 31 * result + (friends != null ? friends.hashCode() : 0);
            return result;
        }
    }
}