| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- //------------------------------------------------------------
- // 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;
- }
- }
- }
|