Results 1 to 5 of 5

Thread: XML versturen naar een webservice

  1. #1

    XML versturen naar een webservice

    Ik moet een XML versturen naar een webservice.
    Via de WSDL importer wordt de onderstaande (een deel ervan) unit gegenereerd.

    Ik dacht dat ik via de functie 'CreateTestOperation' de xml kon meegeven, maar krijg deze functie niet vanuit mijn form (CreateTest.).
    Moet ik iets anders aanspreken of krijg ik deze niet in mijn form omwille van de:

    // Cannot unwrap:
    // - Input element wrapper name does not match operation's name
    // - More than one strictly out element was found


    Code:
     
    unit CreateTest;
      ...
      // ************************************************************************ //
      // Namespace : http://naam.webservice/Test
      // soapAction: http://naam.webservice/Test/CreateTest
      // transport : http://schemas.xmlsoap.org/soap/http
      // style     : document
      // binding   : CreateTestSoap12Binding
      // service   : CreateTest
      // port      : CreateTestHttpSoap12Endpoint
      // URL       : http://locatie/services/CreateTest.CreateTestHttpSoap12Endpoint
      // ************************************************************************ //
      TestPortType = interface(IInvokable)
      ['{80BCFF13-3610-D1A9-2E2A-462A00BBDCB9}']
    
        // Cannot unwrap:
        //     - Input element wrapper name does not match operation's name
        //     - More than one strictly out element was found
        function  CreateTestOperation(const parameters: CreateTest): CreateTestResponse; stdcall;
      end;
    
    function GetCreateTestPortType(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): CreateTestPortType;
    
    
    implementation
      uses SysUtils;
      ...

  2. #2
    Ik heb een procedure (button) die een XML genereert.
    Na het genereren van de XML wil ik deze versturen naar de webservice.
    Momenteel heb ik onderstaande code.
    Weet iemand hoe ik dit kan meesturen, of me op de juiste weg helpen?



    Code:
    procedure Tform1.btnRunClick(Sender: TObject);
      var
        ...
    
        XMLDoc : IXMLDocument;
        root,child, child1, : IXMLNode;
    
        vSendXML : CreateTest;
    
      begin
        ...
        (genereer XML) 
        ...
    
      
        vSendXML := CreateTest.Create;
    ??? vSendXML := XMLDoc.XML; ???
         
        try
          GetCreateTestPortType.CreateTest(vSendXML).Result);
        finally
          vSendXML.Free;
        end;
    
      end;

    Stuk code gegenereert door de import van de WSDL:

    Code:
    unit CreateTest;   
    
      ...
    
      // ************************************************************************ //
      // XML       : CreateTest, global, <element>
      // Namespace : http://...
      // Serializtn: [xoLiteralParam]
      // Info      : Wrapper
      // ************************************************************************ //
      CreateTest = class(TRemotable)
      private
        FData: Data;
        FMemo: string;
        FMemo_Specified: boolean;
        Fblad: DocumentFile;
        Fblad_Specified: boolean;
        FbladMemo: string;
        FbladMemo_Specified: boolean;
        Fbijlages: ArrayOfDocumentFile;
        Fbijlages_Specified: boolean;
        FbijlagesMemo: ArrayOfString;
        FbijlagesMemo_Specified: boolean;
        procedure SetMemo(Index: Integer; const Astring: string);
        function  Memo_Specified(Index: Integer): boolean;
        procedure Setblad(Index: Integer; const ADocumentFile: DocumentFile);
        function  blad_Specified(Index: Integer): boolean;
        procedure SetbladMemo(Index: Integer; const Astring: string);
        function  bladMemo_Specified(Index: Integer): boolean;
        procedure Setbijlages(Index: Integer; const AArrayOfDocumentFile: ArrayOfDocumentFile);
        function  bijlages_Specified(Index: Integer): boolean;
        procedure SetbijlagesMemo(Index: Integer; const AArrayOfString: ArrayOfString);
        function  bijlagesMemo_Specified(Index: Integer): boolean;
      public
        constructor Create; override;
        destructor Destroy; override;
      published
        property Data:            Data                 read FData write FData;
        property Memo:            string               Index (IS_OPTN) read FMemo write SetMemo stored Memo_Specified;
        property blad:            DocumentFile         Index (IS_OPTN) read Fblad write Setblad stored blad_Specified;
        property bladMemo:        string               Index (IS_OPTN) read FbladMemo write SetbladMemo stored bladMemo_Specified;
        property bijlages:        ArrayOfDocumentFile  Index (IS_OPTN) read Fbijlages write Setbijlages stored bijlages_Specified;
        property bijlagesMemo:    ArrayOfString        Index (IS_OPTN) read FbijlagesMemo write SetbijlagesMemo stored bijlagesMemo_Specified;
      end;
    
    
      ...
    
      // ************************************************************************ //
      // Namespace : http://naam.webservice/Test
      // soapAction: http://naam.webservice/Test/CreateTest
      // transport : http://schemas.xmlsoap.org/soap/http
      // style     : document
      // binding   : CreateTestSoap12Binding
      // service   : CreateTest
      // port      : CreateTestHttpSoap12Endpoint
      // URL       : http://locatie/services/CreateTest.CreateTestHttpSoap12Endpoint
      // ************************************************************************ //
      TestPortType = interface(IInvokable)
      ['{80BCFF13-3610-D1A9-2E2A-462A00BBDCB9}']
    
        // Cannot unwrap:
        //     - Input element wrapper name does not match operation's name
        //     - More than one strictly out element was found
        function  CreateTestOperation(const parameters: CreateTest): CreateTestResponse; stdcall;
      end;
    
    function GetCreateTestPortType(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): CreateTestPortType;
    
    
    implementation
      uses SysUtils;
    
      ...

  3. #3
    Je zult eerst moeten kijken waarom Delphi de WSDL niet kan parsen, tot die tijd heb je geen geldige klasse waar je tegenaan kunt praten. Is die WSDL ook online te bereiken?
    Marcel

  4. #4
    De WSDL is online helaas niet bereikbaar.

    Ik vraag me af of deze melding (cannot unwrap) een probleem vormt of niet.
    Als ik dit google en topics hierover lees lijken sommige deze melding te negeren.

  5. #5
    OK, terug naar je originele vraag dan. Er wordt een wrapper om het object heen gemaakt, je kunt dus nu gewoon methods en properties aanspreken. Waar wil je nu die XML op posten?
    Marcel

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •