Необходимо добавить в существующий Delphi проект обмен данными с удаленным сервером через SOAP. WSDL есть. Столкнулся с тем, что wsdl импортер для Delphi отрабатывает не корректно.
Пример
1. Кусок WSDL
<xs:complexType name="MessagePrimaryContent">
<xs:sequence>
<xs:any namespace="##other" processContents="skip"/>
</xs:sequence>
<xs:attribute name="id" type="xs:ID"/>
</xs:complexType>
2. Сформированный wsdl импортером Delphi-класс для вышеуказанного куска.
MessagePrimaryContent = class(TRemotable)
private
Fid: string;
Fid_Specified: boolean;
procedure Setid(Index: Integer; const Astring: string);
function id_Specified(Index: Integer): boolean;
published
property id: string Index (IS_ATTR or IS_OPTN) read Fid write Setid stored id_Specified;
end;
3. С# класс для него же
public partial class MessagePrimaryContent : object, System.ComponentModel.INotifyPropertyChanged {
private System.Xml.XmlElement anyField;
private string idField;
/// <remarks/>
[System.Xml.Serialization.XmlAnyElementAttribute(Order=0)]
public System.Xml.XmlElement Any {
get {
return this.anyField;
}
set {
this.anyField = value;
this.RaisePropertyChanged("Any");
}
}
/// <remarks/>
[System.Xml.Serialization.XmlAttributeAttribute(DataType="ID")]
public string id {
get {
return this.idField;
}
set {
this.idField = value;
this.RaisePropertyChanged("id");
}
}
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string propertyName) {
System.ComponentModel.PropertyChangedEventHandler propertyChanged = this.PropertyChanged;
if ((propertyChanged != null)) {
propertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
}
После импорта в Delphi никакого упоминания об элементе Any нет, в отличии от С#. Может у кого были похожие проблемы?? Или кто нибудь знает альтернативный вариант WSDL -импортера.?
Уж очень не хочется разбирать XML вручную.
P.S. Импорт тестировался на d7, XE1, XE10.1 - результат одинаков.