Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Импорт типа UNION в SOAPHTTPClient через wsdl / 5 сообщений из 5, страница 1 из 1
28.08.2017, 11:35:36
    #39511489
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт типа UNION в SOAPHTTPClient через wsdl
День добрый.

Есть 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
28.08.2017, 11:39:39
    #39511492
Ежов Дмитрий Сергеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Импорт типа UNION в SOAPHTTPClient через wsdl
Конечно, я могу заменить тип string на variant, но

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

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

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


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