View Javadoc
1   package org.oxerr.chbtc.dto.valuereader;
2   
3   import static org.oxerr.chbtc.CHBTCClient.ENCODING;
4   
5   import java.io.IOException;
6   import java.io.InputStream;
7   
8   import org.apache.commons.io.IOUtils;
9   import org.slf4j.Logger;
10  import org.slf4j.LoggerFactory;
11  
12  import com.fasterxml.jackson.core.JsonParseException;
13  import com.fasterxml.jackson.databind.ObjectMapper;
14  import com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException;
15  
16  public class JsonValueReader<T> implements ValueReader<T> {
17  
18  	private final Logger log = LoggerFactory.getLogger(JsonValueReader.class);
19  
20  	private final ObjectMapper objectMapper;
21  
22  	private final Class<T> valueType;
23  
24  	public JsonValueReader(ObjectMapper objectMapper, Class<T> valueType) {
25  		this.objectMapper = objectMapper;
26  		this.valueType = valueType;
27  	}
28  
29  	/**
30  	 * {@inheritDoc}
31  	 */
32  	@Override
33  	public T read(InputStream inputStream) throws IOException {
34  		final String content = IOUtils.toString(inputStream, ENCODING);
35  		return read(content);
36  	}
37  
38  	protected T read(String content) throws IOException {
39  		log.trace("Reading {} from \"{}\".", valueType, content);
40  
41  		try (InputStream in = IOUtils.toInputStream(content, ENCODING)) {
42  			return objectMapper.readValue(in, valueType);
43  		} catch (JsonParseException e) {
44  			String msg = String.format("Parse from \"%1$s\" failed: %2$s",
45  					content,
46  					e.getMessage());
47  			throw new JsonParseException(msg, e.getLocation(), e);
48  		} catch (UnrecognizedPropertyException e) {
49  			String msg = String.format("Parse from \"%1$s\" failed: %2$s",
50  					content,
51  					e.getMessage());
52  			throw new JsonParseException(msg, e.getLocation(), e);
53  		}
54  	}
55  
56  }