Hi!

I want to post an article via Json API. When I install and enable module, post an article, the response is "201 Created" OK.

After that I install and enable JSON API File, with Token and File Entity module, because I want to upload image to article.
If this modules enabled, and POST an article with JSON API, I get 500 Internal Server Error, but the article created!

Version:
Drupal 8.5.4
PHP 7.1.18
Apache 2.4.6
MariaDb 10.3.7

The log details is:

TypeError: Argument 1 passed to Drupal\jsonapi\Normalizer\EntityReferenceFieldNormalizer::isInternalResourceType() must implement interface Drupal\Core\Entity\EntityInterface, null given, called in /var/www/html/lab01/modules/contrib/jsonapi/src/Normalizer/EntityReferenceFieldNormalizer.php on line 138 in Drupal\jsonapi\Normalizer\EntityReferenceFieldNormalizer->isInternalResourceType() (line 253 of /var/www/html/lab01/modules/contrib/jsonapi/src/Normalizer/EntityReferenceFieldNormalizer.php) #0 /var/www/html/lab01/modules/contrib/jsonapi/src/Normalizer/EntityReferenceFieldNormalizer.php(138): Drupal\jsonapi\Normalizer\EntityReferenceFieldNormalizer->isInternalResourceType(NULL) #1 /var/www/html/lab01/vendor/symfony/serializer/Serializer.php(143): Drupal\jsonapi\Normalizer\EntityReferenceFieldNormalizer->normalize(Object(Drupal\Core\Field\EntityReferenceFieldItemList), 'api_json', Array) #2 /var/www/html/lab01/modules/contrib/jsonapi/src/Serializer/Serializer.php(46): Symfony\Component\Serializer\Serializer->normalize(Object(Drupal\Core\Field\EntityReferenceFieldItemList), 'api_json', Array) #3 /var/www/html/lab01/modules/contrib/jsonapi/src/Normalizer/EntityNormalizer.php(214): Drupal\jsonapi\Serializer\Serializer->normalize(Object(Drupal\Core\Field\EntityReferenceFieldItemList), 'api_json', Array) #4 /var/www/html/lab01/modules/contrib/jsonapi/src/Normalizer/EntityNormalizer.php(99): Drupal\jsonapi\Normalizer\EntityNormalizer->serializeField(Object(Drupal\Core\Field\EntityReferenceFieldItemList), Array, 'api_json') #5 /var/www/html/lab01/modules/jsonapi_extras/src/Normalizer/EntityNormalizerTrait.php(72): Drupal\jsonapi\Normalizer\EntityNormalizer->normalize(Object(Drupal\node\Entity\Node), 'api_json', Array) #6 /var/www/html/lab01/vendor/symfony/serializer/Serializer.php(143): Drupal\jsonapi_extras\Normalizer\ContentEntityNormalizer->normalize(Object(Drupal\node\Entity\Node), 'api_json', Array) #7 /var/www/html/lab01/modules/contrib/jsonapi/src/Serializer/Serializer.php(46): Symfony\Component\Serializer\Serializer->normalize(Object(Drupal\node\Entity\Node), 'api_json', Array) #8 /var/www/html/lab01/modules/contrib/jsonapi/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php(218): Drupal\jsonapi\Serializer\Serializer->normalize(Object(Drupal\node\Entity\Node), 'api_json', Array) #9 [internal function]: Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer->Drupal\jsonapi\Normalizer\{closure}(Object(Drupal\node\Entity\Node)) #10 /var/www/html/lab01/modules/contrib/jsonapi/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php(219): array_map(Object(Closure), Array) #11 /var/www/html/lab01/modules/contrib/jsonapi/src/Normalizer/JsonApiDocumentTopLevelNormalizer.php(172): Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer->buildNormalizerValue(Object(Drupal\node\Entity\Node), 'api_json', Array) #12 /var/www/html/lab01/vendor/symfony/serializer/Serializer.php(143): Drupal\jsonapi\Normalizer\JsonApiDocumentTopLevelNormalizer->normalize(Object(Drupal\jsonapi\Resource\JsonApiDocumentTopLevel), 'api_json', Array) #13 /var/www/html/lab01/modules/contrib/jsonapi/src/Serializer/Serializer.php(46): Symfony\Component\Serializer\Serializer->normalize(Object(Drupal\jsonapi\Resource\JsonApiDocumentTopLevel), 'api_json', Array) #14 /var/www/html/lab01/vendor/symfony/serializer/Serializer.php(116): Drupal\jsonapi\Serializer\Serializer->normalize(Object(Drupal\jsonapi\Resource\JsonApiDocumentTopLevel), 'api_json', Array) #15 /var/www/html/lab01/modules/contrib/jsonapi/src/EventSubscriber/ResourceResponseSubscriber.php(140): Symfony\Component\Serializer\Serializer->serialize(Object(Drupal\jsonapi\Resource\JsonApiDocumentTopLevel), 'api_json', Array) #16 /var/www/html/lab01/core/lib/Drupal/Core/Render/Renderer.php(582): Drupal\jsonapi\EventSubscriber\ResourceResponseSubscriber->Drupal\jsonapi\EventSubscriber\{closure}() #17 /var/www/html/lab01/modules/contrib/jsonapi/src/EventSubscriber/ResourceResponseSubscriber.php(143): Drupal\Core\Render\Renderer->executeInRenderContext(Object(Drupal\Core\Render\RenderContext), Object(Closure)) #18 /var/www/html/lab01/modules/contrib/jsonapi/src/EventSubscriber/ResourceResponseSubscriber.php(93): Drupal\jsonapi\EventSubscriber\ResourceResponseSubscriber->renderResponseBody(Object(Symfony\Component\HttpFoundation\Request), Object(Drupal\jsonapi\ResourceResponse), Object(Drupal\jsonapi\Serializer\Serializer), 'api_json') #19 [internal function]: Drupal\jsonapi\EventSubscriber\ResourceResponseSubscriber->onResponse(Object(Symfony\Component\HttpKernel\Event\FilterResponseEvent), 'kernel.response', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher)) #20 /var/www/html/lab01/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(111): call_user_func(Array, Object(Symfony\Component\HttpKernel\Event\FilterResponseEvent), 'kernel.response', Object(Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher)) #21 /var/www/html/lab01/vendor/symfony/http-kernel/HttpKernel.php(191): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.response', Object(Symfony\Component\HttpKernel\Event\FilterResponseEvent)) #22 /var/www/html/lab01/vendor/symfony/http-kernel/HttpKernel.php(173): Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object(Drupal\jsonapi\ResourceResponse), Object(Symfony\Component\HttpFoundation\Request), 1) #23 /var/www/html/lab01/vendor/symfony/http-kernel/HttpKernel.php(68): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #24 /var/www/html/lab01/core/lib/Drupal/Core/StackMiddleware/Session.php(57): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #25 /var/www/html/lab01/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(47): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #26 /var/www/html/lab01/core/modules/page_cache/src/StackMiddleware/PageCache.php(99): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #27 /var/www/html/lab01/core/modules/page_cache/src/StackMiddleware/PageCache.php(78): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true) #28 /var/www/html/lab01/modules/contrib/jsonapi/src/StackMiddleware/FormatSetter.php(41): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #29 /var/www/html/lab01/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(47): Drupal\jsonapi\StackMiddleware\FormatSetter->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #30 /var/www/html/lab01/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(52): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #31 /var/www/html/lab01/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #32 /var/www/html/lab01/core/lib/Drupal/Core/DrupalKernel.php(666): Stack\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #33 /var/www/html/lab01/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #34 {main}.

Many Thanks!

Comments

taki47 created an issue.

spleshka’s picture

Hi, can you try installing the latest dev release and confirm that issue is still there? Thanks!

gerzenstl’s picture

I'm getting the same error. In my case, I have been used this module for many months.

I'm not sure if the jsonapi_file module is causing this error.

I have installed:
* jsonapi: 8.x-1.20
* jsonapi_extras: 8.x-2.1
* jsonapi_file: 8.x-1.2+1-dev

PHP 7.1.18

gerzenstl’s picture

It seems this error is caused by a regression in jsonapi 1.19.

This issue affects any site with token module installed and jsonapi 1.19+. The issue was reported on #2978262.

The patch on #19 fixed this error on my case.

ahmed.raza’s picture

I am having the same error and for me token module is not installed on my site.

Updated jsonapi from 8.x-2.0 to 8.x-2.1 and whole website started crashing and logs showing the same error. Please help

ahmed.raza’s picture

Alright so definitely there is something wrong with 8.x-2.1 I downgraded to 8.x-2.x-dev and problem solved.

ahmed.raza’s picture

TypeError: Argument 1 passed to Drupal\jsonapi\Normalizer\RelationshipNormalizer::__construct() must be an instance of Drupal\jsonapi\LinkManager\LinkManager, instance of Drupal\jsonapi\ResourceType\ResourceTypeRepository given, called in /var/www/drupal-8/core/lib/Drupal/Component/DependencyInjection/Container.php on line 274 in Drupal\jsonapi\Normalizer\RelationshipNormalizer->__construct() (line 59 of /var/www/drupal-8/modules/jsonapi/src/Normalizer/RelationshipNormalizer.php) #0 /var/www/drupal-8/core/lib/Drupal/Component/DependencyInjection/Container.php(274): Drupal\jsonapi\Normalizer\RelationshipNormalizer->__construct(Object(Drupal\jsonapi\ResourceType\ResourceTypeRepository), Object(Drupal\jsonapi\LinkManager\LinkManager), Object(Drupal\Core\Entity\EntityFieldManager), Object(Drupal\Core\Entity\EntityRepository)) #1 /var/www/drupal-8/core/lib/Drupal/Component/DependencyInjection/Container.php(495): Drupal\Component\DependencyInjection\Container->createService(Array, 'private__ThWCwm...') #2 /var/www/drupal-8/core/lib/Drupal/Component/DependencyInjection/Container.php(508): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array) #3 /var/www/drupal-8/core/lib/Drupal/Component/DependencyInjection/Container.php(230): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array) #4 /var/www/drupal-8/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal\Component\DependencyInjection\Container->createService(Array, 'jsonapi.seriali...') #5 /var/www/drupal-8/core/lib/Drupal/Component/DependencyInjection/Container.php(480): Drupal\Component\DependencyInjection\Container->get('jsonapi.seriali...', 1) #6 /var/www/drupal-8/core/lib/Drupal/Component/DependencyInjection/Container.php(230): Drupal\Component\DependencyInjection\Container->resolveServicesAndParameters(Array) #7 /var/www/drupal-8/core/lib/Drupal/Component/DependencyInjection/Container.php(171): Drupal\Component\DependencyInjection\Container->createService(Array, 'jsonapi.resourc...') #8 /var/www/drupal-8/core/lib/Drupal/Component/EventDispatcher/ContainerAwareEventDispatcher.php(105): Drupal\Component\DependencyInjection\Container->get('jsonapi.resourc...') #9 /var/www/drupal-8/vendor/symfony/http-kernel/HttpKernel.php(191): Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch('kernel.response', Object(Symfony\Component\HttpKernel\Event\FilterResponseEvent)) #10 /var/www/drupal-8/vendor/symfony/http-kernel/HttpKernel.php(173): Symfony\Component\HttpKernel\HttpKernel->filterResponse(Object(Drupal\Core\Render\HtmlResponse), Object(Symfony\Component\HttpFoundation\Request), 1) #11 /var/www/drupal-8/vendor/symfony/http-kernel/HttpKernel.php(68): Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object(Symfony\Component\HttpFoundation\Request), 1) #12 /var/www/drupal-8/modules/simple_oauth/src/HttpMiddleware/BasicAuthSwap.php(67): Symfony\Component\HttpKernel\HttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #13 /var/www/drupal-8/core/lib/Drupal/Core/StackMiddleware/Session.php(57): Drupal\simple_oauth\HttpMiddleware\BasicAuthSwap->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #14 /var/www/drupal-8/core/lib/Drupal/Core/StackMiddleware/KernelPreHandle.php(47): Drupal\Core\StackMiddleware\Session->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #15 /var/www/drupal-8/core/modules/page_cache/src/StackMiddleware/PageCache.php(99): Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #16 /var/www/drupal-8/core/modules/page_cache/src/StackMiddleware/PageCache.php(78): Drupal\page_cache\StackMiddleware\PageCache->pass(Object(Symfony\Component\HttpFoundation\Request), 1, true) #17 /var/www/drupal-8/modules/jsonapi/src/StackMiddleware/FormatSetter.php(41): Drupal\page_cache\StackMiddleware\PageCache->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #18 /var/www/drupal-8/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php(47): Drupal\jsonapi\StackMiddleware\FormatSetter->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #19 /var/www/drupal-8/core/lib/Drupal/Core/StackMiddleware/NegotiationMiddleware.php(52): Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #20 /var/www/drupal-8/vendor/stack/builder/src/Stack/StackedHttpKernel.php(23): Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #21 /var/www/drupal-8/core/lib/Drupal/Core/DrupalKernel.php(693): Stack\StackedHttpKernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true) #22 /var/www/drupal-8/index.php(19): Drupal\Core\DrupalKernel->handle(Object(Symfony\Component\HttpFoundation\Request)) #23 {main}.

spleshka’s picture

I believe you can use native file uploads without this module since 8.x-2.1 of JSON:API. See https://www.drupal.org/node/3024331