package com.nvarghese.beowulf.common.http.payload; import java.util.List; import org.apache.commons.lang.NotImplementedException; import org.apache.http.NameValuePair; import org.apache.http.client.utils.URLEncodedUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class RequestPayloadUtils { static Logger logger = LoggerFactory.getLogger(RequestPayloadUtils.class); public static SerializedRequestPayload serialize(RequestPayload requestPayload) { SerializedRequestPayload serializedRequestPayload = null; if (requestPayload instanceof UrlEncodedRequestPayload) { UrlEncodedRequestPayload urlEncodedRequestPayload = (UrlEncodedRequestPayload) requestPayload; serializedRequestPayload = new SerializedRequestPayload(urlEncodedRequestPayload.getBody(), urlEncodedRequestPayload.getContentType() .getMimeType(), urlEncodedRequestPayload.getContentType().getCharset().name(), UrlEncodedRequestPayload.class.getName()); } else if (requestPayload instanceof MultipartEncodedRequestPayload) { MultipartEncodedRequestPayload multipartEncodedRequestPayload = (MultipartEncodedRequestPayload) requestPayload; serializedRequestPayload = new SerializedRequestPayload(multipartEncodedRequestPayload.getBody(), multipartEncodedRequestPayload .getContentType().getMimeType(), multipartEncodedRequestPayload.getContentType().getCharset().name(), MultipartEncodedRequestPayload.class.getName()); } else if (requestPayload instanceof ByteArrayRequestPayload) { ByteArrayRequestPayload byteArrayRequestPayload = (ByteArrayRequestPayload) requestPayload; serializedRequestPayload = new SerializedRequestPayload(byteArrayRequestPayload.getBody(), byteArrayRequestPayload.getContentType() .getMimeType(), byteArrayRequestPayload.getContentType().getCharset().name(), ByteArrayRequestPayload.class.getName()); } else if (requestPayload instanceof EntityWrappedRequestPayload) { EntityWrappedRequestPayload entityWrappedRequestPayload = (EntityWrappedRequestPayload) requestPayload; serializedRequestPayload = new SerializedRequestPayload(entityWrappedRequestPayload.getBody(), entityWrappedRequestPayload .getContentType().getMimeType(), entityWrappedRequestPayload.getContentType().getCharset().name(), EntityWrappedRequestPayload.class.getName()); } else { logger.warn("Unknown type of request payload received for serializing"); throw new NotImplementedException(); } return serializedRequestPayload; } public static RequestPayload deserialize(SerializedRequestPayload serializedRequestPayload) { RequestPayload requestPayload = null; if (UrlEncodedRequestPayload.class.getName().equalsIgnoreCase(serializedRequestPayload.getTargetClassName())) { List<NameValuePair> parameters = URLEncodedUtils.parse(new String(serializedRequestPayload.getBody()), serializedRequestPayload .getContentType().getCharset()); UrlEncodedRequestPayload urlRequestPayload = new UrlEncodedRequestPayload(parameters, serializedRequestPayload.getContentType() .getCharset().name()); return urlRequestPayload; } else if (MultipartEncodedRequestPayload.class.getName().equalsIgnoreCase(serializedRequestPayload.getTargetClassName())) { logger.warn("MultipartEncodedRequestPayload cannot be deserialized"); throw new NotImplementedException(); } else if (ByteArrayRequestPayload.class.getName().equalsIgnoreCase(serializedRequestPayload.getTargetClassName())) { ByteArrayRequestPayload byteArrayRequestPayload = new ByteArrayRequestPayload(serializedRequestPayload.getBody(), serializedRequestPayload.getContentType()); return byteArrayRequestPayload; } else if (EntityWrappedRequestPayload.class.getName().equalsIgnoreCase(serializedRequestPayload.getTargetClassName())) { logger.warn("EntityWrappedRequestPayload cannot be deserialized"); throw new NotImplementedException(); } else { logger.warn("Unknown type of request payload received for deserializing"); throw new NotImplementedException(); } } }