Skip to content

Commit

Permalink
Refactored serialization feature to be aligned with transport.
Browse files Browse the repository at this point in the history
  • Loading branch information
SzymonPobiega committed Jan 11, 2016
1 parent eb97f0b commit 25b88df
Show file tree
Hide file tree
Showing 29 changed files with 210 additions and 434 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
using System.Threading.Tasks;
using NServiceBus.AcceptanceTesting;
using NServiceBus.AcceptanceTests.EndpointTemplates;
using NServiceBus.Features;
using NServiceBus.MessageInterfaces;
using NServiceBus.Serialization;
using NServiceBus.Settings;
using NUnit.Framework;

public class When_registering_additional_deserializers : NServiceBusAcceptanceTest
Expand Down Expand Up @@ -65,6 +66,8 @@ public class MyRequestHandler : IHandleMessages<MyRequest>
public Task Handle(MyRequest request, IMessageHandlerContext context)
{
Context.HandlerGotTheRequest = true;
Context.DeserializeCalled = request.DeserializerCalled;
Context.SerializeCalled = request.SerializerCalled;
return Task.FromResult(0);
}
}
Expand All @@ -73,49 +76,36 @@ public Task Handle(MyRequest request, IMessageHandlerContext context)
[Serializable]
public class MyRequest : IMessage
{
public bool DeserializerCalled { get; set; }
public bool SerializerCalled { get; set; }
}

class MyCustomSerializer : SerializationDefinition
{
protected override Type ProvidedByFeature()
protected override Func<IMessageMapper, IMessageSerializer> Configure(ReadOnlySettings settings)
{
return typeof(MyCustomSerialization);
return mapper => new MyCustomMessageSerializer();
}
}

class MyCustomSerialization : ConfigureSerialization
{
public MyCustomSerialization()
{
EnableByDefault();
}

protected override Type GetSerializerType(FeatureConfigurationContext context)
{
return typeof(MyCustomMessageSerializer);
}
}


class MyCustomMessageSerializer : IMessageSerializer
{
public Context Context { get; set; }

public void Serialize(object message, Stream stream)
{
var serializer = new BinaryFormatter();
serializer.Serialize(stream, message);

Context.SerializeCalled = true;
((MyRequest) message).SerializerCalled = true;

serializer.Serialize(stream, message);
}

public object[] Deserialize(Stream stream, IList<Type> messageTypes = null)
{
var serializer = new BinaryFormatter();

Context.DeserializeCalled = true;
stream.Position = 0;
var msg = serializer.Deserialize(stream);

((MyRequest) msg).DeserializerCalled = true;
return new[]
{
msg
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,9 @@
using System.Threading.Tasks;
using NServiceBus.AcceptanceTesting;
using NServiceBus.AcceptanceTests.EndpointTemplates;
using NServiceBus.Features;
using NServiceBus.MessageInterfaces;
using NServiceBus.Serialization;
using NServiceBus.Settings;
using NUnit.Framework;

public class When_registering_custom_serializer : NServiceBusAcceptanceTest
Expand Down Expand Up @@ -50,7 +51,7 @@ public class EndpointViaType : EndpointConfigurationBuilder
{
public EndpointViaType()
{
EndpointSetup<DefaultServer>(c => c.UseSerialization(typeof(MyCustomSerializer)));
EndpointSetup<DefaultServer>(c => c.UseSerialization<MySuperSerializer>());
}

public class MyRequestHandler : IHandleMessages<MyRequest>
Expand All @@ -69,7 +70,7 @@ public class EndpointViaDefinition : EndpointConfigurationBuilder
{
public EndpointViaDefinition()
{
EndpointSetup<DefaultServer>(c => c.UseSerialization(typeof(MySuperSerializer)));
EndpointSetup<DefaultServer>(c => c.UseSerialization<MySuperSerializer>());
}

public class MyRequestHandler : IHandleMessages<MyRequest>
Expand All @@ -91,25 +92,12 @@ public class MyRequest : IMessage

class MySuperSerializer : SerializationDefinition
{
protected override Type ProvidedByFeature()
protected override Func<IMessageMapper, IMessageSerializer> Configure(ReadOnlySettings settings)
{
return typeof(MySuperSerializerFeature);
return mapper => new MyCustomSerializer();
}
}

class MySuperSerializerFeature : ConfigureSerialization
{
public MySuperSerializerFeature()
{
EnableByDefault();
}

protected override Type GetSerializerType(FeatureConfigurationContext context)
{
return typeof(MyCustomSerializer);
}
}


class MyCustomSerializer : IMessageSerializer
{
public Context Context { get; set; }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
using NServiceBus.Features;
using NServiceBus.Hosting.Helpers;
using NServiceBus.ObjectBuilder;
using NServiceBus.Serialization;

public class DefaultServer : IEndpointSetupTemplate
{
Expand Down Expand Up @@ -56,7 +57,7 @@ public async Task<BusConfiguration> GetConfiguration(RunDescriptor runDescriptor

if (serializer != null)
{
builder.UseSerialization(Type.GetType(serializer));
builder.UseSerialization((SerializationDefinition)Activator.CreateInstance(Type.GetType(serializer, true)));
}
await builder.DefinePersistence(settings);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ namespace NServiceBus
public void EndpointName(string name) { }
public void ExcludeAssemblies(params string[] assemblies) { }
public void ExcludeTypes(params System.Type[] types) { }
[System.ObsoleteAttribute("Please use `UseTransport<T>().AddAddressTranslationRule` instead. Will be removed" +
" in version 7.0.0.", true)]
[System.ObsoleteAttribute("Please use `UseCustomLogicalToTransportAddressTranslation` instead. Will be remov" +
"ed in version 7.0.0.", true)]
public void OverrideLocalAddress(string queue) { }
public void OverridePublicReturnAddress(string address) { }
[System.ObsoleteAttribute("Please use `OverridePublicReturnAddress(string address)` instead. Will be removed" +
Expand Down Expand Up @@ -425,7 +425,8 @@ namespace NServiceBus
{
System.Collections.Generic.IReadOnlyCollection<NServiceBus.Transports.TransportOperation> Operations { get; }
}
[System.ObsoleteAttribute(@"IHandleMessages<T> now exposes the IMessageHandlerContext parameter. You can use this to access what used to be available in the IBus interface. If you're trying to send messages outside IHandleMessages<T> use either the provided IBusSession or create one with the IBusSessionFactory. Will be removed in version 7.0.0.", true)]
[System.ObsoleteAttribute("When in context of handler use IMessageHandlingContext. Otherwise use IBusSession" +
"Factory to create sending context. Will be removed in version 7.0.0.", true)]
public interface IBus { }
public interface IBusContext : NServiceBus.Extensibility.IExtendable
{
Expand Down Expand Up @@ -650,7 +651,7 @@ namespace NServiceBus
public class JsonSerializer : NServiceBus.Serialization.SerializationDefinition
{
public JsonSerializer() { }
protected internal override System.Type ProvidedByFeature() { }
protected internal override System.Func<NServiceBus.MessageInterfaces.IMessageMapper, NServiceBus.Serialization.IMessageSerializer> Configure(NServiceBus.Settings.ReadOnlySettings settings) { }
}
public class static JsonSerializerConfigurationExtensions
{
Expand Down Expand Up @@ -895,6 +896,11 @@ namespace NServiceBus
where T : NServiceBus.Serialization.SerializationDefinition, new () { }
public static NServiceBus.Serialization.SerializationExtentions<T> UseSerialization<T>(this NServiceBus.BusConfiguration config)
where T : NServiceBus.Serialization.SerializationDefinition, new () { }
public static NServiceBus.Serialization.SerializationExtentions<T> UseSerialization<T>(this NServiceBus.BusConfiguration config, T serializationDefinition)
where T : NServiceBus.Serialization.SerializationDefinition { }
[System.ObsoleteAttribute("To use a custom serializer derive from SerializationDefinition and provide a fact" +
"ory method for creating the serializer instance. Will be removed in version 7.0." +
"0.", true)]
public static void UseSerialization(this NServiceBus.BusConfiguration config, System.Type serializerType) { }
}
public class static SerializationContextExtensions
Expand Down Expand Up @@ -1049,7 +1055,7 @@ namespace NServiceBus
public class XmlSerializer : NServiceBus.Serialization.SerializationDefinition
{
public XmlSerializer() { }
protected internal override System.Type ProvidedByFeature() { }
protected internal override System.Func<NServiceBus.MessageInterfaces.IMessageMapper, NServiceBus.Serialization.IMessageSerializer> Configure(NServiceBus.Settings.ReadOnlySettings settings) { }
}
}
namespace NServiceBus.Audit
Expand Down Expand Up @@ -1538,10 +1544,6 @@ namespace NServiceBus.Features
{
protected internal override void Setup(NServiceBus.Features.FeatureConfigurationContext context) { }
}
public class JsonSerialization : NServiceBus.Serialization.ConfigureSerialization
{
protected override System.Type GetSerializerType(NServiceBus.Features.FeatureConfigurationContext context) { }
}
public class MessageDrivenSubscriptions : NServiceBus.Features.Feature
{
protected internal override void Setup(NServiceBus.Features.FeatureConfigurationContext context) { }
Expand Down Expand Up @@ -1600,10 +1602,6 @@ namespace NServiceBus.Features
{
public TimeoutManagerBasedDeferral() { }
}
public class XmlSerialization : NServiceBus.Serialization.ConfigureSerialization
{
protected override System.Type GetSerializerType(NServiceBus.Features.FeatureConfigurationContext context) { }
}
}
namespace NServiceBus.Gateway.Deduplication
{
Expand Down Expand Up @@ -2406,12 +2404,12 @@ namespace NServiceBus.SecondLevelRetries.Config
}
namespace NServiceBus.Serialization
{
public abstract class ConfigureSerialization : NServiceBus.Features.Feature
[System.ObsoleteAttribute("To use a custom serializer derive from SerializationDefinition and provide a fact" +
"ory method for creating the serializer instance. Will be removed in version 7.0." +
"0.", true)]
public abstract class ConfigureSerialization
{
protected ConfigureSerialization() { }
protected abstract System.Type GetSerializerType(NServiceBus.Features.FeatureConfigurationContext context);
protected virtual void RegisterSerializer(NServiceBus.Features.FeatureConfigurationContext context, System.Type serializerType) { }
protected internal void Setup(NServiceBus.Features.FeatureConfigurationContext context) { }
}
public interface IMessageSerializer
{
Expand All @@ -2422,42 +2420,14 @@ namespace NServiceBus.Serialization
public abstract class SerializationDefinition
{
protected SerializationDefinition() { }
protected internal abstract System.Type ProvidedByFeature();
protected internal abstract System.Func<NServiceBus.MessageInterfaces.IMessageMapper, NServiceBus.Serialization.IMessageSerializer> Configure(NServiceBus.Settings.ReadOnlySettings settings);
}
public class SerializationExtentions<T> : NServiceBus.Configuration.AdvanceExtensibility.ExposeSettings
where T : NServiceBus.Serialization.SerializationDefinition
{
public SerializationExtentions(NServiceBus.Settings.SettingsHolder settings) { }
}
}
namespace NServiceBus.Serializers.Json
{
public class JsonMessageSerializer : NServiceBus.Serialization.IMessageSerializer
{
public JsonMessageSerializer(NServiceBus.MessageInterfaces.IMessageMapper messageMapper) { }
public string ContentType { get; }
public System.Text.Encoding Encoding { get; set; }
public object[] Deserialize(System.IO.Stream stream, System.Collections.Generic.IList<System.Type> messageTypes) { }
public object DeserializeObject(string value, System.Type type) { }
public void Serialize(object message, System.IO.Stream stream) { }
public string SerializeObject(object value) { }
}
}
namespace NServiceBus.Serializers.XML
{
public class XmlMessageSerializer : NServiceBus.Serialization.IMessageSerializer
{
public XmlMessageSerializer(NServiceBus.MessageInterfaces.IMessageMapper mapper, NServiceBus.Conventions conventions) { }
public string ContentType { get; }
public string Namespace { get; set; }
public bool SanitizeInput { get; set; }
public bool SkipWrappingRawXml { get; set; }
public object[] Deserialize(System.IO.Stream stream, System.Collections.Generic.IList<System.Type> messageTypesToDeserialize = null) { }
public void Initialize(System.Collections.Generic.IEnumerable<System.Type> types) { }
public void InitType(System.Type t) { }
public void Serialize(object message, System.IO.Stream stream) { }
}
}
namespace NServiceBus.Settings
{
public interface ReadOnlySettings
Expand Down
1 change: 0 additions & 1 deletion src/NServiceBus.Core.Tests/NServiceBus.Core.Tests.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@
<Compile Include="Routing\TransportAddressesTest.cs" />
<Compile Include="Routing\UnicastRouterTests.cs" />
<Compile Include="Serializers\MessageDeserializerResolverTests.cs" />
<Compile Include="Serializers\SerializationExtensionsTests.cs" />
<Compile Include="Performance\TimeToBeReceived\TimeToBeReceivedAttributeTests.cs" />
<Compile Include="Config\TestConfigurationSection.cs" />
<Compile Include="Config\When_no_custom_configuration_source_is_specified.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ namespace NServiceBus.Serializers.Json.Tests
using System.Threading.Tasks;
using Features;
using NServiceBus.ObjectBuilder;
using NServiceBus.Serialization;
using NUnit.Framework;

[TestFixture]
Expand Down Expand Up @@ -42,7 +43,7 @@ public ValidatorTask(IBuilder builder)

protected override Task OnStart(IBusSession session)
{
var serializer = builder.Build<JsonMessageSerializer>();
var serializer = (JsonMessageSerializer) builder.Build<IMessageSerializer>();
Assert.AreSame(Encoding.UTF8, serializer.Encoding);
return Task.FromResult(0);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ namespace NServiceBus.Serializers.Json.Tests
using System.Threading.Tasks;
using Features;
using NServiceBus.ObjectBuilder;
using NServiceBus.Serialization;
using NUnit.Framework;

[TestFixture]
Expand Down Expand Up @@ -41,7 +42,7 @@ public ValidatorTask(IBuilder builder)

protected override Task OnStart(IBusSession session)
{
var serializer = builder.Build<JsonMessageSerializer>();
var serializer = (JsonMessageSerializer) builder.Build<IMessageSerializer>();
Assert.AreSame(Encoding.UTF7, serializer.Encoding);
return Task.FromResult(0);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
using System.Collections.Generic;
using NServiceBus.MessageInterfaces.MessageMapper.Reflection;
using NServiceBus.Serialization;
using NServiceBus.Serializers.Json;
using NServiceBus.Serializers.XML;
using NUnit.Framework;
using Conventions = NServiceBus.Conventions;

Expand All @@ -20,11 +18,11 @@ public void Setup()
var mapper = new MessageMapper();
var xml = new XmlMessageSerializer(mapper, new Conventions());
var json = new JsonMessageSerializer(mapper);
resolver = new MessageDeserializerResolver(new IMessageSerializer[]
resolver = new MessageDeserializerResolver(xml, new IMessageSerializer[]
{
xml,
json
}, xml.GetType());
});
}

[TestCase(ContentTypes.Xml, typeof(XmlMessageSerializer))]
Expand Down

This file was deleted.

Loading

0 comments on commit 25b88df

Please sign in to comment.