freemarkerdor/src/main/java/cz/xelfi/quoridor/freemarkerdor/W3CDocumentReader.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 25 Oct 2009 14:54:58 +0100
changeset 134 6544ad908b05
child 178 4b78d4f028b3
permissions -rw-r--r--
W3C Document reader is needed only in freemarkerdor
jaroslav@134
     1
/*
jaroslav@134
     2
 * To change this template, choose Tools | Templates
jaroslav@134
     3
 * and open the template in the editor.
jaroslav@134
     4
 */
jaroslav@134
     5
jaroslav@134
     6
package cz.xelfi.quoridor.freemarkerdor;
jaroslav@134
     7
jaroslav@134
     8
import java.io.IOException;
jaroslav@134
     9
import java.io.InputStream;
jaroslav@134
    10
import java.lang.annotation.Annotation;
jaroslav@134
    11
import java.lang.reflect.Type;
jaroslav@134
    12
import javax.ws.rs.Consumes;
jaroslav@134
    13
import javax.ws.rs.WebApplicationException;
jaroslav@134
    14
import javax.ws.rs.core.MediaType;
jaroslav@134
    15
import javax.ws.rs.core.MultivaluedMap;
jaroslav@134
    16
import javax.ws.rs.ext.Provider;
jaroslav@134
    17
import javax.xml.parsers.DocumentBuilder;
jaroslav@134
    18
import javax.xml.parsers.DocumentBuilderFactory;
jaroslav@134
    19
import javax.xml.parsers.ParserConfigurationException;
jaroslav@134
    20
import org.w3c.dom.Document;
jaroslav@134
    21
import org.xml.sax.SAXException;
jaroslav@134
    22
jaroslav@134
    23
/**
jaroslav@134
    24
 *
jaroslav@134
    25
 * @author Jaroslav Tulach <jtulach@netbeans.org>
jaroslav@134
    26
 */
jaroslav@134
    27
@Provider
jaroslav@134
    28
@Consumes(MediaType.TEXT_XML)
jaroslav@134
    29
public class W3CDocumentReader implements javax.ws.rs.ext.MessageBodyReader<Document> {
jaroslav@134
    30
    public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mediaType) {
jaroslav@134
    31
        return type == Document.class;
jaroslav@134
    32
    }
jaroslav@134
    33
jaroslav@134
    34
    public Document readFrom(Class<Document> type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap<String, String> httpHeaders, InputStream entityStream) throws IOException, WebApplicationException {
jaroslav@134
    35
        try {
jaroslav@134
    36
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
jaroslav@134
    37
            DocumentBuilder builder = factory.newDocumentBuilder();
jaroslav@134
    38
            return builder.parse(entityStream);
jaroslav@134
    39
        } catch (ParserConfigurationException ex) {
jaroslav@134
    40
            throw new WebApplicationException(ex);
jaroslav@134
    41
        } catch (SAXException ex) {
jaroslav@134
    42
            throw new WebApplicationException(ex);
jaroslav@134
    43
        }
jaroslav@134
    44
    }
jaroslav@134
    45
jaroslav@134
    46
}