package org.restlet.ext.jaxrs.internal.provider; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import javax.ws.rs.Consumes; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.MultivaluedMap; import javax.ws.rs.ext.Provider; import org.simpleframework.xml.Root; import org.simpleframework.xml.Serializer; import org.simpleframework.xml.core.Persister; /** * Provider based on the Simple XML framework in order to convert Java beans to XML * and vice versa. * * @author Kiran Rao * @see <a href="http://simple.sourceforge.net/">Simple XML</a> */ @Provider @Produces({ "application/xml", MediaType.TEXT_XML, "application/*+xml" }) @Consumes({ "application/xml", MediaType.TEXT_XML, "application/*+xml" }) public class SimpleXmlProvider extends AbstractProvider<Object> { private final Serializer serializer = new Persister(); @Override public long getSize(Object object, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return -1; } @Override public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return type.isAnnotationPresent(Root.class); } @Override public boolean isWriteable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) { return type.isAnnotationPresent(Root.class); } @Override public Object readFrom(Class<Object> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpResponseHeaders, InputStream entityStream) throws IOException { try { return serializer.read(type, entityStream); } catch (Exception e) { throw new IOException("Could not parse as " + type.getName(), e); } } @Override public void writeTo(Object object, Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, Object> httpHeaders, OutputStream entityStream) throws IOException { try { serializer.write(object, entityStream); } catch (Exception e) { throw new IOException(e); } } }