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
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 }