package org.jboss.resteasy.test.client.proxy.resource; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.MessageBodyWriter; import javax.ws.rs.ext.Provider; import java.io.IOException; import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.GenericArrayType; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; import java.util.List; @Provider public class ProxyWithGenericReturnTypeMessageBodyWriter implements MessageBodyWriter<List<String>> { @Override public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return true; } @Override public long getSize(List<String> t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return -1; } @Override public void writeTo(List<String> t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { String val; if (genericType == null) { val = "null"; } else if (genericType instanceof ParameterizedType) { ParameterizedType parameterizedType = (ParameterizedType) genericType; val = ((Class) parameterizedType.getRawType()).getSimpleName() + "<"; Type paramType = parameterizedType.getActualTypeArguments()[0]; if (paramType instanceof Class) { val += ((Class) paramType).getSimpleName(); } else { val += paramType.toString(); } val += ">"; } else if (genericType instanceof TypeVariable) { val = "TypeVariable"; } else if (genericType instanceof GenericArrayType) { val = "GenericArrayType"; } else { val = "Type"; } entityStream.write(val.getBytes()); } }