/**
  * {@inheritDoc}
  * @return FileConversionClient
  */
 public function createService(ServiceLocatorInterface $serviceLocator)
 {
     /** @var \Detail\FileConversion\Options\ModuleOptions $moduleOptions */
     $moduleOptions = $serviceLocator->get('Detail\\FileConversion\\Options\\ModuleOptions');
     $clientOptions = $moduleOptions->getClient();
     /** @var \Detail\FileConversion\Client\Job\JobBuilder $jobBuilder */
     $jobBuilder = $serviceLocator->get('Detail\\FileConversion\\Client\\Job\\JobBuilder');
     return FileConversionClient::factory($clientOptions->toArray(), $jobBuilder);
 }
<?php

use Detail\FileConversion\Client\FileConversionClient;
$config = (require '../bootstrap.php');
$imageUrl = isset($_GET['image_url']) ? $_GET['image_url'] : null;
if (!$imageUrl) {
    throw new RuntimeException('Missing or invalid parameter "image_url"');
}
$imageSize = isset($_GET['image_size']) ? $_GET['image_size'] : 200;
$image = new SplFileInfo($imageUrl);
$imageName = $image->getBasename();
$getConfig = function ($optionName) use($config) {
    if (!isset($config[$optionName])) {
        throw new RuntimeException(sprintf('Missing configuration option "%s"', $optionName));
    }
    return $config[$optionName];
};
$client = FileConversionClient::factory($config);
/** @var \Detail\FileConversion\Client\Job\JobBuilder $jobBuilder */
$jobBuilder = $client->getJobBuilder();
$jobBuilder->setDefaultOption('action.save', array('type' => 's3', 'params' => array('bucket' => $getConfig('s3bucket'))));
$job = $jobBuilder->createJob()->setSourceUrl($imageUrl)->addAction($jobBuilder->createAction()->setName('thumbnail')->setParams(array('size' => $imageSize))->setSaveOptions(array('identifier' => $imageName, 'params' => array('key' => $getConfig('s3path') . '/' . $imageName . '-' . $imageSize . '_dfw-fileconversion.jpg'))));
try {
    $job->addNotification($jobBuilder->createNotification()->setParams(array('url' => $getConfig('notification_url'))));
} catch (RuntimeException $e) {
    // Do nothing when no notification URL is provided (job will be created without notification)
}
$response = $client->submitJob($job);
var_dump($response->getResult());
 public function testJobBuilderCanBeSet()
 {
     $client = FileConversionClient::factory();
     $this->assertInstanceOf(JobBuilder::CLASS, $client->getJobBuilder());
     $jobBuilder = new JobBuilder();
     $this->assertEquals($client, $client->setJobBuilder($jobBuilder));
     $this->assertEquals($jobBuilder, $client->getJobBuilder());
 }