Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 8 additions & 1 deletion src/Abc.ServiceModel.HL7/Abc.ServiceModel.HL7.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,17 @@
<EmbeddedResource Remove="obj\**" />
<None Remove="obj\**" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Protocol\HL7\SR.resx">
<LogicalName>Abc.ServiceModel.Protocol.HL7.SR.resources</LogicalName>
</EmbeddedResource>
</ItemGroup>

<PropertyGroup>
<PropertyGroup>
<TargetFrameworks>net471;net6.0;net8.0</TargetFrameworks>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<Version>0.4.1-rc.0</Version>
<AssemblyVersion>0.4.0.2</AssemblyVersion>
</PropertyGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net45' or '$(TargetFramework)' == 'net40'">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ namespace System.ServiceModel.Description
#endif
{
using System;
using System.Linq;
using System.Reflection;

internal static class OperationDescriptionExtensions
Expand All @@ -18,7 +19,17 @@ public static Type GetReturnType(this OperationDescription operationDescription)

Type outputType = null;
#if NET45_OR_GREATER || NETCOREAPP
outputType = operationDescription.TaskMethod?.ReturnType.GetGenericArguments()[0];
// outputType = operationDescription.TaskMethod?.ReturnType.GetGenericArguments()[0];
if (operationDescription.TaskMethod != null &&
operationDescription.TaskMethod.ReturnType.GetGenericArguments().Any())
{
outputType = operationDescription.TaskMethod?.ReturnType.GetGenericArguments()[0];
}
else
{
outputType = operationDescription.TaskMethod?.ReturnType;
}

#endif
#if NET45_OR_GREATER
if (outputType == null) {
Expand Down
50 changes: 50 additions & 0 deletions src/Abc.ServiceModel.HL7/Extensions/XmlElementExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
namespace Abc.ServiceModel.HL7.Extensions
{
using System.Linq;
using System.Xml.Linq;

internal static class XmlElementExtensions
{
internal static string GetElementNameWithPrefix(this XElement element)
{
//string ret = element.GetPrefixOfNamespace(element.Name.Namespace);
//if (!string.IsNullOrEmpty(ret))
//{
// ret += ":";
//}

//ret += element.Name.LocalName;

//return ret;

return element.Name.LocalName;
}

internal static bool ContainsAttributesFromThisNamespace(this XElement element, string prefix)
{
if (element == null)
{
return false;
}

if (string.IsNullOrWhiteSpace(prefix))
{
return false;
}

var _prefix = prefix.Trim() + ":";
var matchingElements = element
.DescendantsAndSelf() // include the root and all its descendants
.Attributes()
.Where(attr => attr.Value != null && attr.Value.StartsWith(_prefix))
.Select(attr => attr).ToList();

if (matchingElements.Any())
{
return true;
}

return false;
}
}
}
7 changes: 6 additions & 1 deletion src/Abc.ServiceModel.HL7/HL7/HL7ClientMessageFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,12 @@ public object DeserializeReply(Message message, object[] parameters)

if (this.attribute != null && !this.attribute.AcknowledgementResponse && this.parameterType != typeof(void) && messageHl7 != null && messageHl7.ControlAct != null && messageHl7.ControlAct.Subject != null)
{
body = messageHl7.ControlAct.Subject.GetBody(this.CreateInputSerializer(this.parameterType, HL7Request.RequestType.MessageRequest));
body = messageHl7.ControlAct.Subject.GetBody(
this.CreateInputSerializer(
this.parameterType,
HL7Request.RequestType.MessageRequest,
rootName: messageHl7.ControlAct.Subject?.SubjectElementName,
rootNamespace: HL7Constants.Namespace));
}

var operationContext = new HL7OperationContext();
Expand Down
31 changes: 25 additions & 6 deletions src/Abc.ServiceModel.HL7/HL7/HL7DispatchMessageFormatter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public void DeserializeRequest(Message message, object[] parameters)
operationContext.OperationContract = this.attribute;
OperationContext.Current.Extensions.Add(operationContext);
var messageHL7 = HL7MessageExtension.ReadHL7Message(message, this.attribute.Interaction);

HL7Request request = messageHL7 as HL7Request;
if (request == null)
{
Expand All @@ -44,7 +44,12 @@ public void DeserializeRequest(Message message, object[] parameters)
throw new FormatException(string.Format(CultureInfo.InvariantCulture, SrProtocol.IsNotSet, "request.QueryControlAct"));
}

parameters[0] = request.QueryControlAct.QueryByParameterPayload.GetBody(this.CreateInputSerializer(this.parameterType, HL7Request.RequestType.QueryParamRequest));
parameters[0] = request.QueryControlAct.QueryByParameterPayload.GetBody(
this.CreateInputSerializer(
this.parameterType,
HL7Request.RequestType.QueryParamRequest,
rootName: request.QueryControlAct.QueryByParameterPayload.QueryByParameterPayloadElementName,
rootNamespace: HL7Constants.Namespace));
break;

case HL7Request.RequestType.MessageRequest:
Expand All @@ -53,8 +58,12 @@ public void DeserializeRequest(Message message, object[] parameters)
{
throw new FormatException(string.Format(CultureInfo.InvariantCulture, SrProtocol.IsNotSet, "request.ControlAct"));
}

var param = this.CreateInputSerializer(this.parameterType, HL7Request.RequestType.MessageRequest);

var param = this.CreateInputSerializer(
this.parameterType,
HL7Request.RequestType.MessageRequest,
rootName: request.ControlAct.Subject?.SubjectElementName,
rootNamespace: HL7Constants.Namespace);

if (request.ControlAct != null && request.ControlAct.Subject != null)
{
Expand All @@ -70,7 +79,12 @@ public void DeserializeRequest(Message message, object[] parameters)
throw new FormatException(string.Format(CultureInfo.InvariantCulture, SrProtocol.IsNotSet, "request.QueryControlAct"));
}

parameters[0] = request.QueryControlAct.QueryContinuation.GetBody(this.CreateInputSerializer(this.parameterType, HL7Request.RequestType.QueryContinuationRequest));
parameters[0] = request.QueryControlAct.QueryContinuation.GetBody(
this.CreateInputSerializer(
this.parameterType,
HL7Request.RequestType.QueryContinuationRequest,
rootName: request.QueryControlAct.QueryContinuation?.QueryContinuationElementName,
rootNamespace: HL7Constants.Namespace));
break;

default:
Expand All @@ -80,7 +94,12 @@ public void DeserializeRequest(Message message, object[] parameters)
throw new FormatException(string.Format(CultureInfo.InvariantCulture, SrProtocol.IsNotSet, "request.ControlAct"));
}

parameters[0] = request.ControlAct.Subject.GetBody(this.CreateInputSerializer(this.parameterType, HL7Request.RequestType.MessageRequest));
parameters[0] = request.ControlAct.Subject.GetBody(
this.CreateInputSerializer(
this.parameterType,
HL7Request.RequestType.MessageRequest,
rootName: request.ControlAct.Subject?.SubjectElementName,
rootNamespace: HL7Constants.Namespace));
break;
}

Expand Down
Loading
Loading