mirror of
https://github.com/werkraum-media/thuecat.git
synced 2024-12-04 19:16:13 +01:00
Catch mapping exceptions during converting entities. (#109)
Those are handled the same way, the entity is skipped and errors are logged. That way further entities can be imported while only none working entities are skipped. Relates: #10653
This commit is contained in:
parent
773098623e
commit
2a39dc7753
3 changed files with 37 additions and 17 deletions
|
@ -162,11 +162,11 @@ class Importer
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($content['@graph'] as $jsonEntity) {
|
foreach ($content['@graph'] as $jsonEntity) {
|
||||||
$this->importJsonEntity($jsonEntity);
|
$this->importJsonEntity($jsonEntity, $url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private function importJsonEntity(array $jsonEntity): void
|
private function importJsonEntity(array $jsonEntity, string $url): void
|
||||||
{
|
{
|
||||||
if ($this->entityAllowed($jsonEntity) === false) {
|
if ($this->entityAllowed($jsonEntity) === false) {
|
||||||
return;
|
return;
|
||||||
|
@ -191,12 +191,7 @@ class Importer
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
} catch (MappingException $e) {
|
} catch (MappingException $e) {
|
||||||
$this->logger->error('Could not map data to entity.', [
|
$this->handleMappingException($e, $language);
|
||||||
'url' => $e->getUrl(),
|
|
||||||
'language' => $language,
|
|
||||||
'mappingError' => $e->getMessage(),
|
|
||||||
]);
|
|
||||||
$this->import->getLog()->addEntry(new MappingError($e));
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -205,14 +200,25 @@ class Importer
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$convertedEntity = $this->converter->convert(
|
try {
|
||||||
$mappedEntity,
|
$convertedEntity = $this->converter->convert(
|
||||||
$this->import->getConfiguration(),
|
$mappedEntity,
|
||||||
$language
|
$this->import->getConfiguration(),
|
||||||
);
|
$language
|
||||||
|
);
|
||||||
|
} catch (MappingException $e) {
|
||||||
|
$this->handleMappingException($e, $language);
|
||||||
|
$convertedEntity = null;
|
||||||
|
}
|
||||||
|
|
||||||
if ($convertedEntity === null) {
|
if ($convertedEntity === null) {
|
||||||
$this->logger->error('Could not convert entity.', ['language' => $language, 'targetEntity' => $targetEntity]);
|
$this->logger->notice(
|
||||||
|
'Could not convert entity.',
|
||||||
|
[
|
||||||
|
'url' => $url,
|
||||||
|
'language' => $language,
|
||||||
|
'targetEntity' => $targetEntity,
|
||||||
|
]);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
$entities->add($convertedEntity);
|
$entities->add($convertedEntity);
|
||||||
|
@ -239,4 +245,14 @@ class Importer
|
||||||
$this->logger->notice('Deny entity as type is not allowed.', ['types' => $jsonEntity['@type']]);
|
$this->logger->notice('Deny entity as type is not allowed.', ['types' => $jsonEntity['@type']]);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private function handleMappingException(MappingException $exception, string $language): void
|
||||||
|
{
|
||||||
|
$this->logger->error('Could not map data to entity.', [
|
||||||
|
'url' => $exception->getUrl(),
|
||||||
|
'language' => $language,
|
||||||
|
'mappingError' => $exception->getMessage(),
|
||||||
|
]);
|
||||||
|
$this->import->getLog()->addEntry(new MappingError($exception));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,12 +17,16 @@ Features
|
||||||
Fixes
|
Fixes
|
||||||
-----
|
-----
|
||||||
|
|
||||||
Nothing
|
* Catch mapping exceptions during converting entities.
|
||||||
|
Those are handled the same way, the entity is skipped and errors are logged.
|
||||||
|
That way further entities can be imported while only none working entities are skipped.
|
||||||
|
|
||||||
Tasks
|
Tasks
|
||||||
-----
|
-----
|
||||||
|
|
||||||
Nothing
|
* Converted log entry for none converted entity from error to notice.
|
||||||
|
As this might hint at an issue but most probably is okay, e.g. due to none active
|
||||||
|
language, missing name, etc.
|
||||||
|
|
||||||
Deprecation
|
Deprecation
|
||||||
-----------
|
-----------
|
||||||
|
|
|
@ -11,7 +11,7 @@ $EM_CONF[$_EXTKEY] = [
|
||||||
'author' => 'Daniel Siepmann',
|
'author' => 'Daniel Siepmann',
|
||||||
'author_email' => 'coding@daniel-siepmann.de',
|
'author_email' => 'coding@daniel-siepmann.de',
|
||||||
'author_company' => '',
|
'author_company' => '',
|
||||||
'version' => '2.0.0',
|
'version' => '2.1.0',
|
||||||
'constraints' => [
|
'constraints' => [
|
||||||
'depends' => [
|
'depends' => [
|
||||||
'core' => '',
|
'core' => '',
|
||||||
|
|
Loading…
Reference in a new issue