001 package de.deepamehta.plugins.webservice.provider; 002 003 import java.io.IOException; 004 import java.io.OutputStream; 005 import java.io.OutputStreamWriter; 006 import java.io.PrintWriter; 007 import java.lang.annotation.Annotation; 008 import java.lang.reflect.Type; 009 010 import javax.ws.rs.WebApplicationException; 011 import javax.ws.rs.core.MediaType; 012 import javax.ws.rs.core.MultivaluedMap; 013 import javax.ws.rs.ext.MessageBodyWriter; 014 import javax.ws.rs.ext.Provider; 015 016 017 018 @Provider 019 public class NumberProvider implements MessageBodyWriter<Number> { 020 021 // -------------------------------------------------------------------------------------------------- Public Methods 022 023 // *** MessageBodyWriter Implementation *** 024 025 @Override 026 public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { 027 // Note: unlike equals() isCompatible() ignores parameters like "charset" in "application/json;charset=UTF-8" 028 return Number.class.isAssignableFrom(type) && mediaType.isCompatible(MediaType.APPLICATION_JSON_TYPE); 029 } 030 031 @Override 032 public long getSize(Number number, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { 033 return -1; 034 } 035 036 @Override 037 public void writeTo(Number number, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, 038 MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) 039 throws IOException, WebApplicationException { 040 try { 041 PrintWriter writer = new PrintWriter(new OutputStreamWriter(entityStream)); 042 writer.println(number); 043 writer.flush(); 044 } catch (Exception e) { 045 throw new RuntimeException("Writing message body failed", e); 046 } 047 } 048 }