diff --git a/Code/Framework/AzCore/AzCore/Component/EntitySerializer.cpp b/Code/Framework/AzCore/AzCore/Component/EntitySerializer.cpp index 16452be76d..64ba9b2c2c 100644 --- a/Code/Framework/AzCore/AzCore/Component/EntitySerializer.cpp +++ b/Code/Framework/AzCore/AzCore/Component/EntitySerializer.cpp @@ -81,9 +81,14 @@ namespace AZ azrtti_typeid(), inputValue, "Components", context); + static TypeId genericComponentWrapperTypeId("{68D358CA-89B9-4730-8BA6-E181DEA28FDE}"); for (auto& [componentKey, component] : componentMap) { - entityInstance->m_components.emplace_back(component); + // if underlying type is genericComponentWrapperTypeId, the template is null and the component should not be addded + if (component->GetUnderlyingComponentType() != genericComponentWrapperTypeId) + { + entityInstance->m_components.emplace_back(component); + } } result.Combine(componentLoadResult); diff --git a/Code/Framework/AzCore/AzCore/Serialization/Json/JsonDeserializer.cpp b/Code/Framework/AzCore/AzCore/Serialization/Json/JsonDeserializer.cpp index 840034e52f..c1ffb774e8 100644 --- a/Code/Framework/AzCore/AzCore/Serialization/Json/JsonDeserializer.cpp +++ b/Code/Framework/AzCore/AzCore/Serialization/Json/JsonDeserializer.cpp @@ -571,9 +571,23 @@ namespace AZ if (loadedTypeId.m_determination == TypeIdDetermination::FailedToDetermine || loadedTypeId.m_determination == TypeIdDetermination::FailedDueToMultipleTypeIds) { - AZStd::string_view message = loadedTypeId.m_determination == TypeIdDetermination::FailedDueToMultipleTypeIds ? - "Unable to resolve provided type because the same name points to multiple types." : - "Unable to resolve provided type."; + AZStd::string message; + if (loadedTypeId.m_determination == TypeIdDetermination::FailedDueToMultipleTypeIds) + { + message = "Unable to resolve provided type because the same name points to multiple types."; + } + else + { + auto typeField = pointerData.FindMember(JsonSerialization::TypeIdFieldIdentifier); + if (typeField != pointerData.MemberEnd() && typeField->value.IsString()) + { + message = AZStd::string::format("Unable to resolve provided type: %s.", typeField->value.GetString()); + } + else + { + message = "Unable to resolve provided type."; + } + } status = context.Report(Tasks::RetrieveInfo, Outcomes::Unknown, message); return ResolvePointerResult::FullyProcessed; } diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabDomUtils.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabDomUtils.cpp index dcc14d3b91..f60759f77e 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabDomUtils.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabDomUtils.cpp @@ -253,6 +253,15 @@ namespace AzToolsFramework settings.m_metadata.Add(&entityIdMapper); settings.m_metadata.Create(newlyAddedEntities); + AZStd::string scratchBuffer; + auto issueReportingCallback = [&scratchBuffer]( + AZStd::string_view message, AZ::JsonSerializationResult::ResultCode result, + AZStd::string_view path) -> AZ::JsonSerializationResult::ResultCode + { + return Internal::JsonIssueReporter(scratchBuffer, message, result, path); + }; + settings.m_reporting = AZStd::move(issueReportingCallback); + AZ::JsonSerializationResult::ResultCode result = AZ::JsonSerialization::Load(instance, prefabDom, settings); AZ::Data::AssetManager::Instance().ResumeAssetRelease();