Cam Sonaris - 2013-07-16

My MessageBodyWriter

@Provider 
@Produces("text/csv") 
public class CSVMessageBodyWriter implements MessageBodyWriter<JaxbList>

    public static final String CONTENT_DISPOSITION_HEADER = "Content-Disposition"; 
    private final static HeaderDelegate<ContentDispositionHeader> 
    header = RuntimeDelegate.getInstance().createHeaderDelegate(ContentDispositionHeader.class);

     public long getSize(JaxbList t, Class<?> type, Type genericType, Annotation[] annotations,         MediaType mediaType) { 
          return -1; 
     }

     public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { 
          return CsvSerializer.class.isAssignableFrom(type); 
     }

     public void writeTo(JaxbList t, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String,Object> httpHeaders, OutputStream entityStream) throws IOException, WebApplicationException { 
           // set content disposition. This will enable browsers to open excel 
          ContentDispositionHeader contentDispositionHeader = ContentDispositionHeader.createContentDispositionHeader(MediaTypeUtils.CSV_TYPE);
          contentDispositionHeader.setFileName("representation");

          //$NON-NLS-1$ httpHeaders.putSingle(CONTENT_DISPOSITION_HEADER, header.toString(contentDispositionHeader));  
          Charset charset = Charset.forName(ProviderUtils.getCharset(mediaType)); 
          OutputStreamWriter writer = new OutputStreamWriter(entityStream, charset);  
          PrintWriter printWriter = new PrintWriter(writer); 
          Iterator<String[]> rows = ((CsvSerializer) t).getEntities(); 
          while (rows.hasNext()) { 
               printWriter.println(CsvWriter.getCSVRow(rows.next())); 
          } 
          printWriter.flush(); 
      } 
 }

My REST Application

@Path("app/v3") 
@GZIP 
@Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, "text/csv"}) 
public class ApplicationREST

Extension of Application

@ApplicationPath("/") 
public class JaxRsActivator extends Application { 
     private Set<Object> singletons = new HashSet<Object>(); 
     private Set<Class<?>> classes = new HashSet<Class<?>>();

     public JaxRsActivator() { 
          singletons.add(new CSVMessageBodyWriter()); 
          classes.add(ApplicationREST.class); 
     }

     @Override public Set<Object> getSingletons() { 
          Set<Object> defaults = super.getSingletons(); 
          singletons.addAll(defaults); return singletons; 
     }

     public Set<Class<?>> getClasses() {
           return classes; 
     }
 }

When I run in debug mode I can hit my JaxRsActivator class, so I know that the providers are being loaded. However I get the error "Could not find MessageBodyWriter for response object of type: net.comp.jaxb.JaxbList of media type: text/csv"