/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.transport.jaxrs; import java.io.IOException; import java.io.InputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import javax.ws.rs.Consumes; 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.Provider; import org.fudgemsg.FudgeContext; import org.fudgemsg.FudgeMsg; import org.fudgemsg.mapping.FudgeDeserializer; import org.fudgemsg.wire.FudgeDataInputStreamReader; import org.fudgemsg.wire.FudgeMsgReader; /** * A JAX-RS provider to convert RESTful responses to Fudge binary encoded messages. * <p> * This converts directly to Fudge from the RESTful resource without the need to manually create the message in application code. */ @Provider @Consumes(FudgeRest.MEDIA) public class FudgeObjectBinaryConsumer extends FudgeBase implements MessageBodyReader<Object> { /** * Creates the consumer. */ public FudgeObjectBinaryConsumer() { super(); } /** * Creates the consumer. * * @param context the Fudge context to use, not null */ public FudgeObjectBinaryConsumer(final FudgeContext context) { super(context); } //------------------------------------------------------------------------- @Override public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return getFudgeContext().getObjectDictionary().getMessageBuilder(type) != null; } @Override public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException, WebApplicationException { @SuppressWarnings("resource") FudgeMsgReader reader = new FudgeMsgReader(new FudgeDataInputStreamReader(getFudgeContext(), entityStream)); FudgeMsg message = reader.nextMessage(); if (message == null) { return null; } FudgeDeserializer deser = new FudgeDeserializer(getFudgeContext()); return deser.fudgeMsgToObject(type, message); } }