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";