|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.Description
{
using System.Xml.Linq;
using System.Xml;
using System.Text;
using System.Runtime.Serialization;
using System.ServiceModel.Description;
using System.Reflection;
public static class ParameterXPathQueryGenerator
{
const string XPathSeparator = "/";
const string NsSeparator = ":";
const string ServiceContractPrefix = "xgSc";
public static string CreateFromDataContractSerializer(XName serviceContractName, string operationName, string parameterName, bool isReply, Type type, MemberInfo[] pathToMember, out XmlNamespaceManager namespaces)
{
if (type == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("type"));
}
if (pathToMember == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("pathToMember"));
}
if (operationName == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("operationName"));
}
if (serviceContractName == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("serviceContractName"));
}
if (isReply)
{
operationName += TypeLoader.ResponseSuffix;
}
StringBuilder xPathBuilder = new StringBuilder(XPathSeparator + ServiceContractPrefix + NsSeparator + operationName);
xPathBuilder.Append(XPathSeparator + ServiceContractPrefix + NsSeparator + parameterName);
string xpath = XPathQueryGenerator.CreateFromDataContractSerializer(type, pathToMember, xPathBuilder, out namespaces);
string serviceContractNamespace = serviceContractName.NamespaceName;
// Use default service contract namespace if the provided serviceContractNamespace is null or empty
if (string.IsNullOrEmpty(serviceContractNamespace))
{
serviceContractNamespace = NamingHelper.DefaultNamespace;
}
namespaces.AddNamespace(ServiceContractPrefix, serviceContractNamespace);
return xpath;
}
}
}
|