Update of /cvsroot/springnet/Spring.Net/src/Spring/Spring.Services/Web/Services
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv28957
Modified Files:
WebServiceProxyFactory.cs
Log Message:
WebServiceProxyFactory support for SoapHeaderAttribute [SPRNET-784]
Index: WebServiceProxyFactory.cs
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/src/Spring/Spring.Services/Web/Services/WebServiceProxyFactory.cs,v
retrieving revision 1.26
retrieving revision 1.27
diff -C2 -d -r1.26 -r1.27
*** WebServiceProxyFactory.cs 13 Nov 2007 03:17:49 -0000 1.26
--- WebServiceProxyFactory.cs 29 Nov 2007 13:13:14 -0000 1.27
***************
*** 437,440 ****
--- 437,442 ----
#region Fields
+ private ArrayList soapHeaderFieldNames;
+
// Binding/Type related
private IResource serviceUri;
***************
*** 466,469 ****
--- 468,472 ----
{
this.serviceUri = serviceUri;
+ this.soapHeaderFieldNames = new ArrayList();
Name = "SoapHttpClientProxy";
***************
*** 505,508 ****
--- 508,517 ----
}
+ // add SoapHeader public fields
+ foreach (string fieldName in soapHeaderFieldNames)
+ {
+ typeBuilder.DefineField(fieldName, typeof(SoapHeader), FieldAttributes.Public);
+ }
+
return typeBuilder.CreateType();
}
***************
*** 633,636 ****
--- 642,653 ----
IList attrs = base.GetMethodAttributes(method);
+ // SoapHeaderAttribute (Only SoapHeaders with Direction=SoapHeaderDirection.In are supported)
+ foreach (SoapHeaderBinding soapHeaderBinding in operationBinding.Input.Extensions.FindAll(typeof(SoapHeaderBinding)))
+ {
+ soapHeaderFieldNames.Add(soapHeaderBinding.Part);
+ attrs.Add(CreateSoapHeaderAttribute(soapHeaderBinding.Part, SoapHeaderDirection.In));
+ }
+
+ // SoapMethodAttribute
attrs.Add(CreateSoapMethodAttribute(
operation, operationBinding, soapOperationBinding, inputMembersMapping, outputMembersMapping));
***************
*** 858,861 ****
--- 875,893 ----
/// <summary>
+ /// Creates a <see cref="SoapHeaderAttribute"/> that should be applied to proxy method.
+ /// </summary>
+ private static CustomAttributeBuilder CreateSoapHeaderAttribute(
+ string memberName, SoapHeaderDirection direction)
+ {
+ CustomAttributeBuilderBuilder cabb =
+ new CustomAttributeBuilderBuilder(typeof(SoapHeaderAttribute));
+
+ cabb.AddContructorArgument(memberName);
+ cabb.AddPropertyValue("Direction", direction);
+
+ return cabb.Build();
+ }
+
+ /// <summary>
/// Creates a <see cref="SoapDocumentMethodAttribute"/> or a <see cref="SoapRpcMethodAttribute"/>
/// that should be applied to proxy method.
|