package org.jboss.resteasy.plugins.providers.jsonp;
import javax.json.Json;
import javax.json.JsonReader;
import javax.json.JsonReaderFactory;
import javax.json.JsonWriter;
import javax.json.JsonWriterFactory;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.ContextResolver;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.Charset;
/**
* @author <a href="mailto:bill@burkecentral.com">Bill Burke</a>
* @version $Revision: 1 $
*/
public class AbstractJsonpProvider
{
@Context
javax.ws.rs.ext.Providers providers;
public static Charset getCharset(final MediaType mediaType)
{
if (mediaType != null)
{
String charset = mediaType.getParameters().get("charset");
if (charset != null) return Charset.forName(charset);
}
return null;
}
protected JsonReader findReader(MediaType mediaType, InputStream is)
{
ContextResolver<JsonReaderFactory> resolver = providers.getContextResolver(JsonReaderFactory.class, mediaType);
JsonReaderFactory factory = null;
if (resolver != null)
{
factory = resolver.getContext(JsonReaderFactory.class);
}
if (factory == null)
{
factory = Json.createReaderFactory(null);
}
Charset charset = getCharset(mediaType);
return charset == null ? factory.createReader(is) : factory.createReader(is, charset);
}
protected JsonWriter findWriter(MediaType mediaType, OutputStream os)
{
ContextResolver<JsonWriterFactory> resolver = providers.getContextResolver(JsonWriterFactory.class, mediaType);
JsonWriterFactory factory = null;
if (resolver != null)
{
factory = resolver.getContext(JsonWriterFactory.class);
}
if (factory == null)
{
factory = Json.createWriterFactory(null);
}
Charset charset = getCharset(mediaType);
return charset == null ? factory.createWriter(os) : factory.createWriter(os, charset);
}
}