@Override
 public <O> O deserialise(String source, Class<? extends O> type, Map<String, Object> parameters)
     throws DeserialiserException {
   try {
     ObjectReader reader = reader(type);
     for (Entry<String, Object> entry : parameters.entrySet()) {
       reader = reader.withAttribute(entry.getKey(), entry.getValue());
     }
     return reader.readValue(source);
   } catch (DeserialiserException ex) {
     throw ex;
   } catch (IOException ex) {
     throw new DeserialiserException(ex);
   }
 }