Skip to content

Commit 5417c40

Browse files
authored
Fixes #3117 Serialization should ignore unknown elements (#3118)
* Fixes #3117 Serialization should ignore unknown elements * throw exception
1 parent e10a26a commit 5417c40

File tree

4 files changed

+12
-17
lines changed

4 files changed

+12
-17
lines changed

src/PKSim.Infrastructure/Serialization/Xml/Serializers/UsedBuildingBlockXmlSerializer.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
using System.Xml.Linq;
33
using PKSim.Core.Model;
44
using OSPSuite.Core.Serialization.Xml;
5+
using OSPSuite.Serializer;
56

67
namespace PKSim.Infrastructure.Serialization.Xml.Serializers
78
{
@@ -33,6 +34,9 @@ protected override void TypedDeserialize(UsedBuildingBlock usedBuildingBlock, XE
3334
var buildingBlockNode = usedBuildingBlockNode.Elements().First();
3435
var serializer = SerializerRepository.SerializerFor(buildingBlockNode);
3536

37+
if (serializer == null)
38+
throw new SerializerNotFoundException(buildingBlockNode.Name.LocalName);
39+
3640
usedBuildingBlock.BuildingBlock = serializer.Deserialize<IPKSimBuildingBlock>(buildingBlockNode, context);
3741
}
3842
}

src/PKSim.Infrastructure/Serialization/Xml/XmlReader.cs

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
using System;
22
using System.Xml.Linq;
3-
using OSPSuite.Serializer;
3+
using OSPSuite.Core.Serialization.Xml;
44
using OSPSuite.Serializer.Xml;
55
using PKSim.Infrastructure.Serialization.Xml.Serializers;
6-
using OSPSuite.Core.Serialization.Xml;
76

87
namespace PKSim.Infrastructure.Serialization.Xml
98
{
@@ -24,7 +23,7 @@ public XmlReader(IPKSimXmlSerializerRepository serializerRepository)
2423

2524
public T ReadFrom(XElement element, SerializationContext serializationContext)
2625
{
27-
var itemSerializer = resolveSerializer(typeof (T), element);
26+
var itemSerializer = resolveSerializer(typeof(T), element);
2827
_serializerRepository.DeserializeFormulaCache(element, serializationContext, itemSerializer.ObjectType);
2928
return itemSerializer.Deserialize<T>(element, serializationContext);
3029
}
@@ -39,15 +38,10 @@ public void ReadFrom(T objectToRead, XElement element, SerializationContext seri
3938

4039
private IXmlSerializer<SerializationContext> resolveSerializer(Type typeOfObject, XElement element)
4140
{
42-
try
43-
{
44-
return _serializerRepository.SerializerFor(element);
45-
}
41+
var serializer = _serializerRepository.SerializerFor(element);
42+
4643
//this can happen if the given type was not registered explicitly in the serializer.
47-
catch (SerializerNotFoundException)
48-
{
49-
return _serializerRepository.SerializerFor(typeOfObject);
50-
}
44+
return serializer ?? _serializerRepository.SerializerFor(typeOfObject);
5145
}
5246
}
5347
}

tests/PKSim.Tests/Infrastructure/XmlReaderSpecs.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ protected override void Context()
4848
//serializers only defined for type but not for element
4949
A.CallTo(() => _serializerRepository.SerializerFor(typeof(IEntity))).Returns(_entitySerializer);
5050

51-
A.CallTo(() => _serializerRepository.SerializerFor(_element)).Throws(new SerializerNotFoundException("toto"));
51+
A.CallTo(() => _serializerRepository.SerializerFor(_element)).Returns(null);
5252
}
5353

5454
protected override void Because()

tests/PKSim.Tests/IntegrationTests/SimulationXmlSerializerSpecs.cs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
using System.Linq;
2+
using NUnit.Framework;
23
using OSPSuite.BDDHelper;
34
using OSPSuite.BDDHelper.Extensions;
4-
using NUnit.Framework;
55
using OSPSuite.Core.Domain;
66
using OSPSuite.Core.Domain.Data;
7-
using OSPSuite.Core.Domain.ParameterIdentifications;
87
using PKSim.Core;
98
using PKSim.Core.Model;
109
using PKSim.Infrastructure;
@@ -62,14 +61,12 @@ public void should_have_deserialized_the_simulation_settings()
6261
_deserializedSimulation.Settings.ShouldNotBeNull();
6362
}
6463

65-
6664
[Observation]
6765
public void should_have_deserialized_the_solver_settings()
6866
{
6967
_deserializedSimulation.Solver.ShouldNotBeNull();
7068
}
7169

72-
7370
[Observation]
7471
public void should_have_deserialized_the_output_selection()
7572
{
@@ -88,7 +85,7 @@ public void should_have_deserialized_references_to_compound_in_compound_properti
8885
foreach (var compound in _deserializedSimulation.Compounds)
8986
{
9087
var cp = _deserializedSimulation.CompoundPropertiesFor(compound);
91-
Assert.AreSame(cp.Compound,compound);
88+
Assert.AreSame(cp.Compound, compound);
9289
}
9390
}
9491

0 commit comments

Comments
 (0)