@Override
    public void accept(Metadata metadata, InputStream contentStream) {
        try {
            Method[] methods = this.type.getMethods();
            Method match = null;
            for (Method method : methods) {
                if (method.getName().equals(metadata.getOperation())) {
                    match = method;
                    break;
                }
            }
            if (match != null) {
                try {
                    Class<?>[] parameterTypes = match.getParameterTypes();
                    Object[] convertedArgs = this.argumentsStreamer.deserializeFrom(contentStream, parameterTypes);
                    Object result = match.invoke(this.receiver, convertedArgs);
                    Metadata callbackMeta = new Metadata(UUID.randomUUID().toString(), metadata.getId());
                    client.send(callbackMeta, new Object[]{result});
                } catch (ReflectiveOperationException e) {
                    LOG.warn("Unable to process a call, erred while invoking. receiver type {}, metadata {}", receiver.getClass(), metadata, e);
                }
            } else {
                LOG.error("Unable to process a call, no matching method. receiver type {}, metadata {}", receiver.getClass(), metadata);
            }
        } catch (Exception e) {
            LOG.error("Erred while reading streamed content", e);
        }
    }