tipos servicios services paso invocar desde crear consumir como cero delphi wsdl delphi-xe2 exchangewebservices

delphi - services - tipos de servicios web



¿Cómo arreglar tipos no resueltos al importar archivos wsdl de Servicios Web de Exchange(EWS)? (2)

Al importar el archivo wsdl desde https: //ourmail.server/ews/services.wsdl , inicialmente obtuve una tonelada de "Los siguientes tipos, a los que se hace referencia en el documento WSDL no se representan en este archivo" en los servicios generados. pas.
Luego descargué el archivo wdsl al disco, vi que hacía referencia a http://schemas.microsoft.com/exchange/services/2006/messages y http://schemas.microsoft.com/exchange/services/2006/types , descargado https: //ourmail.server/ews/types.xsd y https: //ourmail.server/ews/messages.xsd y modificado el inicio de services.wdsl from

<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"> <wsdl:types> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:import namespace="http://schemas.microsoft.com/exchange/services/2006/messages" schemaLocation="messages.xsd"/> </xs:schema> </wsdl:types>

a:

<?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:s="http://www.w3.org/2001/XMLSchema" targetNamespace="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"> <wsdl:types> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:import namespace="http://schemas.microsoft.com/exchange/services/2006/messages" schemaLocation="file://d:/testing/web/exchange web services/types.xsd"/> <xs:import namespace="http://schemas.microsoft.com/exchange/services/2006/messages" schemaLocation="file://d:/testing/web/exchange web services/messages.xsd"/> </xs:schema> </wsdl:types>

Ahora el services.pas generado contiene (solo) estos errores:

// ************************************************************************ // // 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. // ************************************************************************ // // !:double - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:duration - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:time - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:base64Binary - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:boolean - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:int - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:string - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:language - "http://www.w3.org/2001/XMLSchema"[Hdr][Gbl] // !:dateTime - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:lang - "http://www.w3.org/2001/XMLSchema"[GblAttr] // !:nonNegativeInteger - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:anyURI - "http://www.w3.org/2001/XMLSchema"[Gbl] // !:short - "http://www.w3.org/2001/XMLSchema"[Gbl]

¿Qué línea "xs: import" puedo agregar para resolver esto?
He buscado alrededor de los datatypes.xsd y structures.xsd del W3C y he intentado el mismo enfoque, pero no puedo hacer que funcione.



Resulta que esos "tipos que no están representados" en el archivo están bien. Parece como si "Los tipos de la última categoría normalmente se asocian a tipos predefinidos / conocidos de XML o Embarcadero" es exactamente el caso para la mayoría de estos tipos. Los ''extraños'' como nonNegativeInteger y Base64Binary no se usan en ningún otro lado en la fuente.

Una observación adicional: cometí un error al especificar el WDSL inicial. Esa URL dio un error de certificado que impidió la importación de los archivos dependientes. Una vez que probé una URL alternativa sin errores de certificación, los https://webmail.ourmailserver.nl/ews/messages.xsd y https://webmail.ourmailserver.nl/ews/types.xsd se importaron correctamente y ya no tuve que hacer eso desde el disco.

El archivo generado inicialmente no se compila debido a las siguientes construcciones:

type ProtectionRuleAllInternalType = string; ProtectionRuleTrueType = string; ProtectionRuleConditionType = class(TRemotable) private FAllInternal: ProtectionRuleAllInternalType; FAllInternal_Specified: boolean; procedure SetAllInternal(Index: Integer; const AProtectionRuleAllInternalType: ProtectionRuleAllInternalType); public published property True: ProtectionRuleTrueType; end; procedure ProtectionRuleConditionType.SetAllInternal(Index: Integer; const AProtectionRuleAllInternalType: ProtectionRuleAllInternalType); begin FAllInternal := AProtectionRuleAllInternalType; FAllInternal_Specified := True; end;

En el setter, lo que se quiere decir es el valor booleano, pero el compilador cree que es el publicado correctamente llamado True y emitirá un ''Tipos incompatibles''. Cambié el "FAllInternal_Specified: = True;" a "FAllInternal_Specified: = System.True;"

De la misma manera, hay dos propiedades publicadas Create, y el compilador cree que estos son los constructores que anulan los de las llamadas base. Cambié sus nombres a MyCreate.

Esto hace que el archivo generado se compile.