/**
*
*/
package org.ovirt.engine.core.utils.serialization.json;
import java.io.IOException;
import java.io.Serializable;
import java.util.Collection;
import java.util.Map;
import org.apache.commons.lang.SerializationException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.map.SerializationConfig.Feature;
import org.ovirt.engine.core.common.action.AddVmTemplateParameters;
import org.ovirt.engine.core.common.action.RunVmParams;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VmManagementParametersBase;
import org.ovirt.engine.core.common.businessentities.IVdcQueryable;
import org.ovirt.engine.core.common.businessentities.VM;
import org.ovirt.engine.core.common.businessentities.VmBase;
import org.ovirt.engine.core.common.businessentities.VmPayload;
import org.ovirt.engine.core.common.businessentities.VmStatic;
import org.ovirt.engine.core.common.errors.EngineFault;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.utils.SerializationExeption;
import org.ovirt.engine.core.utils.Serializer;
/**
* {@link Serializer} implementation for deserializing JSON content.
*/
public class JsonObjectSerializer implements Serializer {
private static final ObjectMapper unformattedMapper = new ObjectMapper();
private static final ObjectMapper formattedMapper;
static {
formattedMapper = new ObjectMapper();
formattedMapper.getSerializationConfig().addMixInAnnotations(Guid.class, JsonGuidMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(VdcActionParametersBase.class,
JsonVdcActionParametersBaseMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(IVdcQueryable.class, JsonIVdcQueryableMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(VM.class, JsonVmMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(AddVmTemplateParameters.class,
JsonAddVmTemplateParametersMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(VmManagementParametersBase.class,
JsonVmManagementParametersBaseMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(VmBase.class, JsonVmBaseMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(VmStatic.class, JsonVmStaticMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(VmPayload.class, JsonVmPayloadMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(RunVmParams.class, JsonRunVmParamsMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(EngineFault.class, JsonEngineFaultMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(Collection.class, JsonCollectionMixIn.class);
formattedMapper.getSerializationConfig().addMixInAnnotations(Map.class, JsonMapMixIn.class);
formattedMapper.configure(Feature.INDENT_OUTPUT, true);
formattedMapper.enableDefaultTyping();
}
@Override
public String serialize(Object payload) throws SerializationExeption {
if (payload == null) {
return null;
} else {
return writeJsonAsString(payload, formattedMapper);
}
}
/**
* Use the ObjectMapper to parse the payload to String.
*
* @param payload
* - The payload to be returned.
* @param mapper
* - The ObjectMapper.
* @return Parsed string of the serialized object.
*/
private String writeJsonAsString(Object payload, ObjectMapper mapper) {
try {
return mapper.writeValueAsString(payload);
} catch (IOException e) {
throw new SerializationException(e);
}
}
/**
* Parse the serialized content with unformatted Json.
*
* @param payload
* - The serialized Object.
* @return The string value of the serialized object.
*/
public String serializeUnformattedJson(Serializable payload) throws SerializationExeption {
return writeJsonAsString(payload, unformattedMapper);
}
}