/* * Copyright (C) 2013 Intel Corporation * All rights reserved. */ package com.intel.mtwilson.jaxrs2.provider; import com.fasterxml.jackson.databind.ObjectMapper; 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.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyReader; import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; //import org.codehaus.jackson.jaxrs.JacksonJsonProvider; /** * * @author jbuhacoff */ @Provider @Consumes({"application/yaml","text/yaml"}) @Produces({"application/yaml","text/yaml"}) public class ApplicationYamlProvider implements MessageBodyWriter<Object>, MessageBodyReader<Object> { private JacksonYamlObjectMapperProvider jackson = new JacksonYamlObjectMapperProvider(); @Override public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { //return jackson.getContext(type).isWriteable(type, genericType, annotations, mediaType); return ( mediaType.toString().equals("application/yaml") || mediaType.toString().equals("text/yaml") ); } @Override public long getSize(Object t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { // return jackson.getSize(t,type,genericType,annotations,mediaType); return -1; } @Override public void writeTo(Object t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { // jackson.writeTo(t,type,genericType,annotations,mediaType,httpHeaders,entityStream); ObjectMapper mapper = jackson.getContext(type); mapper.writeValue(entityStream, t); } @Override public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { //return jackson.isReadable(type,genericType,annotations,mediaType); return ( mediaType.toString().equals("application/yaml") || mediaType.toString().equals("text/yaml") ); } @Override public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException, WebApplicationException { // return jackson.readFrom(type,genericType,annotations,mediaType,httpHeaders,entityStream); ObjectMapper mapper = jackson.getContext(type); return mapper.readValue(entityStream, type); } }