1 package org.oxerr.chbtc.dto.valuereader;
2
3 import java.io.IOException;
4 import java.io.InputStream;
5
6 import org.apache.commons.io.IOUtils;
7 import org.oxerr.chbtc.CHBTCClientException;
8 import org.oxerr.chbtc.dto.CHBTCError;
9 import org.slf4j.Logger;
10 import org.slf4j.LoggerFactory;
11
12 import com.fasterxml.jackson.core.type.TypeReference;
13 import com.fasterxml.jackson.databind.JsonMappingException;
14 import com.fasterxml.jackson.databind.ObjectMapper;
15
16 public class ErrorableJsonValueTypeRefReader<T> extends JsonValueTypeRefReader<T> {
17
18 private final Logger log = LoggerFactory.getLogger(getClass());
19
20 private final ObjectMapper objectMapper;
21
22 private final TypeReference<T> valueTypeRef;
23
24 public ErrorableJsonValueTypeRefReader(ObjectMapper objectMapper,
25 TypeReference<T> valueTypeRef) {
26 super(objectMapper, valueTypeRef);
27
28 this.objectMapper = objectMapper;
29 this.valueTypeRef = valueTypeRef;
30 }
31
32 @Override
33 public T read(final InputStream inputStream) throws IOException {
34 String content = IOUtils.toString(inputStream);
35
36 if (log.isTraceEnabled()) {
37 log.trace("content: {}", content);
38 }
39
40 try {
41 return objectMapper.readValue(content, valueTypeRef);
42 } catch (JsonMappingException e) {
43 CHBTCError error = objectMapper.readValue(
44 content, CHBTCError.class);
45 throw new CHBTCClientException(error);
46 }
47 }
48
49 }