Guideline: Use the @XmlSchemaType annotation for a strongly typed binding to a .NET client generated with the DataContractSerializer.
java.net.URI maps to xs:string. .NET maps xs:string to System.string. Annotation @XmlSchemaType can be used to define a more strongly typed binding to a .NET client generated with the DataContractSerializer. @XmlSchemaType can be used to map java.net.URI to xs:anyURI. .NET’s DataContractSerializer and XmlSerializer bind xs:anyURI differently:
DataContractSerializer binds xs:anyURI to .NET type System.Uri.
XmlSerializer binds xs:anyURI to .NET type System.string.
Thus, the above technique only works if the WSDL is processed using DataContractSerializer.
Example: @XmlSchemaType and DataContractSerializer
// Java code fragment public class PurchaseOrder { @XmlSchemaType(name="anyURI") public java.net.URI uri; } //-- Schema fragment <xs:complexType name="purchaseOrder"> <xs:sequence> <xs:element name="uri" type="xs:anyURI" minOccurs="0"/> </xs:sequence> </xs:complexType> //--- .NET auto generated code from schema //--- Using svcutil.exe /serializer:DataContractSerializer <wsdl file> public partial class purchaseOrder : object, System.Runtime.Serialization.IExtensibleDataObject { private System.Uri uriField; //-- ..... other generated code ........ public System.Uri uri { get { return this.uriField; } set { this.uriField = value; } } } //--- C# code fragment purchaseOrder tmpU = new purchaseOrder() tmpU.uri = new System.Uri("../Hello", System.UriKind.Relative);
Example:@XmlSchemaType and XmlSerializer
// Java code fragment public class PurchaseOrder { @XmlSchemaType(name="anyURI") public java.net.URI uri; } //--- .NET auto generated code from schema //--- Using svcutil.exe /serializer:XmlSerializer <wsdl file> public partial class purchaseOrder { private string uriField; public string uri { get { return this.uriField; } set { this.uriField = value; } } } //--- C# code fragment purchaseOrder tmpU = new purchaseOrder() tmpU.uri = "mailto:mailto:mduerst@ifi.unizh.ch";