/* * Copyright (c) 2012 EMC Corporation * All Rights Reserved */ package com.emc.storageos.api.service.impl.resource; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.Provider; import javax.ws.rs.ext.MessageBodyReader; import javax.ws.rs.ext.MessageBodyWriter; import org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider; import com.emc.storageos.svcs.errorhandling.resources.APIException; /** * Jersey provider that adds validation to the default Jackson Json provider */ @Provider @Consumes({ MediaType.APPLICATION_JSON }) @Produces({ MediaType.APPLICATION_JSON }) public class ValidatingJacksonJsonProvider implements MessageBodyReader<Object>, MessageBodyWriter<Object> { private JacksonJaxbJsonProvider provider = new JacksonJaxbJsonProvider(); @Override public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return provider.isReadable(type, genericType, annotations, mediaType); } @Override public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException { Object target = provider.readFrom(type, genericType, annotations, mediaType, httpHeaders, entityStream); if (target == null) { throw APIException.badRequests.parameterIsNullOrEmpty(type.getSimpleName()); } InputValidator.getInstance().validate(target); return target; } @Override public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return provider.isWriteable(type, genericType, annotations, mediaType); } @Override public long getSize(Object t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return provider.getSize(t, type, genericType, annotations, mediaType); } @Override public void writeTo(Object t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException { provider.writeTo(t, type, genericType, annotations, mediaType, httpHeaders, entityStream); } }