powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Импорт типа UNION в SOAPHTTPClient через wsdl
5 сообщений из 5, страница 1 из 1
Импорт типа UNION в SOAPHTTPClient через wsdl
    #39511489
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
День добрый.

Есть xsd схема, опубликованная на wsdl сервере. Вот она

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<xs:schema xmlns:tns="http://www.V8ADD.ru" xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.V8ADD.ru" attributeFormDefault="unqualified" elementFormDefault="qualified">
	<xs:element name="Событие" type="tns:ТипСобытие"/>
	<xs:simpleType name="SimpleTypes">
		<xs:union memberTypes="xs:float xs:dateTime xs:int xs:boolean xs:string"/>
	</xs:simpleType>
	<xs:complexType name="ТипДанные">
		<xs:sequence>
			<xs:element name="Ключ" type="xs:string"/>
			<xs:element name="Значение" type="tns:SimpleTypes"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ТипСобытие">
		<xs:sequence>
			<xs:element name="ИмяОбъекта" type="xs:string"/>
			<xs:element name="ID" type="xs:string"/>
			<xs:element name="PID" type="xs:unsignedLong"/>
			<xs:element name="Данные" type="tns:ТипДанные" minOccurs="0" maxOccurs="unbounded"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>



При импорте этой схемы в Дельфи, через Component->Import wsdl, получаю текст модуля (привожу часть)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
type

  // ************************************************************************ //
  // The following types, referred to in the WSDL document are not being represented
  // in this file. They are either aliases[@] of other types represented or were referred
  // to but never[!] declared in the document. The types from the latter category
  // typically map to predefined/known XML or Embarcadero types; however, they could also
  // indicate incorrect WSDL documents that failed to declare or import a schema type.
  // ************************************************************************ //
  // !:boolean         - "http://www.w3.org/2001/XMLSchema"[Gbl]
  // !:string          - "http://www.w3.org/2001/XMLSchema"[Gbl]
  // !:unsignedLong    - "http://www.w3.org/2001/XMLSchema"[Gbl]

  ТипДанные            = class;                 { "http://www.V8ADD.ru"[GblCplx] }
  ТипСобытие           = class;                 { "http://www.V8ADD.ru"[GblCplx] }
  Событие              = class;                 { "http://www.V8ADD.ru"[GblElm] }

  Array_Of_ТипДанные = array of ТипДанные;      { "http://www.V8ADD.ru"[GblUbnd] }
  SimpleTypes     =  type string;      { "http://www.V8ADD.ru"[GblSmpl] }


  // ************************************************************************ //
  // XML       : ТипДанные, global, <complexType>
  // Namespace : http://www.V8ADD.ru
  // ************************************************************************ //
  ТипДанные = class(TRemotable)
  private
    FКлюч: string;
    FЗначение: SimpleTypes;
  published
    property Ключ:     string       read FКлюч write FКлюч;
    property Значение: SimpleTypes  read FЗначение write FЗначение;
  end;



Из исходника видно, что тэг "Значение" принял тип String (в конечном счете), что меня печалит. Как мне сделать вариантный тип, вместо строкового?
...
Рейтинг: 0 / 0
Импорт типа UNION в SOAPHTTPClient через wsdl
    #39511492
Фотография Ежов Дмитрий Сергеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно, я могу заменить тип string на variant, но

Когда я записываю данные, по ощущениям, он все данные в xml файл обмена записывает как строковые, отправляет их на веб-сервер, который потом пытается преобразовать строковые данные в подходящие по типу.
Именно поэтому я расположил порядок данных в Union в таком порядке, и, в принципе, все работает, но перфекционизм гложет меня.
...
Рейтинг: 0 / 0
Импорт типа UNION в SOAPHTTPClient через wsdl
    #39511521
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий СергеевичКонечно, я могу заменить тип string на variant, но

Когда я записываю данные, по ощущениям, он все данные в xml файл обмена записывает как строковые, отправляет их на веб-сервер, который потом пытается преобразовать строковые данные в подходящие по типу.
Именно поэтому я расположил порядок данных в Union в таком порядке, и, в принципе, все работает, но перфекционизм гложет меня.

Дельфийский генератор классов по схеме не обладает интеллектом, позволяющим работать с типом Variant в данных.
...
Рейтинг: 0 / 0
Импорт типа UNION в SOAPHTTPClient через wsdl
    #39511594
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ежов Дмитрий Сергеевичя могу заменить тип string на variant, ноИ как Variant типа varDate превратится в строку? Кто-то знает, про ISO 8601?
...
Рейтинг: 0 / 0
Импорт типа UNION в SOAPHTTPClient через wsdl
    #39511753
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вообще все данные в XML - изначально строковые, чему тут удивляться.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Импорт типа UNION в SOAPHTTPClient через wsdl
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]