Importing a Remobjects SOAP service using Delphi WSDL importer, why are all parameters objects?

Hello Remobjects team,

I just created a trivial Remobjects SOAP service (you know, the one with methods “Sum” and GetServerTime). I called the service “status”. The server uses a tROIndyHTTPServer and a tROSoapmessage.

Accessing the server with a Delphi Remobjects client is trivial and works:

service:=costatus.create(romessage, rochannel);
i:=service.sum(12,34);
showmessage(inttostr(i));

Accessing the server using the Delphi WSDL importer is non-trivial. All parameter types and result types are now suddenly objects (I tested the WSDL importers of Delphi 2007, 2009 and XE2). It works, but it is cumbersome. Is it a feature or a bug? I attach the WSDL and the generated unit here.

Hi.

This is by design, RemObjects uses different style than Delphi.

Oh, does that mean that it’s not possible to create a “simple” SOAP service in Remobjects that uses scalar (integer etc) data types? I currently need to create a SOAP webservice that’s as easy to consume as possible from other programming languages.

It surprises me greatly , since Remobjects can connect to such webservices.

I tried the following “roundtrip”: Import a WSDL from an existing web service in the RO service builder, create a new web service from it and see (using a web browser) if this new webservice produces the same WSDL.

The result is, that the new service publishes a WSDL that is not nearly identical to the original. It defines lots of new types that wrap the parameters of the function calls in [xs:complexType][xs:sequence]sequences.

When I re-import this new WSDL using the RO Service Builder, it is kind enough to “un-tweak” its own changes by unwrapping the complex types again… (see attachment). But if the service builder knows about its own tweaks anyway, why the heck doesn’t ROSDK create “regular” compatible WSDL’s in the first place? After all, they were intended for interoperability which is now very much reduced IMHO.

Delphi wants that name of operation and element will are the same, in this case Dephi SOAPimporter will not create classes. This was logged and fixed. Another workaround is use “SOAPInputNameOverride” custom attribute:


  
    
  

About “roundtrip”, RemObjects wsdl importer converts wsdl to rodl - our format of description services. Of course conversion rodl back to wsdl doesn’t produce the same result.

Thanks a lot for the fix - when can we expect it to be available?

BTW, it is not just Delphi that insists on the names of operations and elements to be the same - it appears that this is part of the “wrapped” convention or so I’ve read here:

http://atmanes.blogspot.com/2005/03/wrapped-documentliteral-convention.html

Hi.
Thank you for link, looks like RemObjects wsdl cofirms this convention. Fix will be available in our next beta (https://secure.remobjects.com/portal/downloads/beta.aspx), unfortunately I can’t give you date of it release now.

Looks like it’s solved indeed in version 6.0.58.997 - the regular Delphi WSDL importer can now unwrap the types. Thanks!

Sorry for my ignorance, but I do have the same issue.

How do i use the “SOAPInputNameOverride” to import the WSDL from a ROSDK service via the Delphi WSDL importer ?