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