Delphi SOAP Runtime and Importer Update

Introduction

This document describes the files included with this SOAP runtime and importer update and provides instructions on how to use the update.

 

Files

The following table lists the runtime files included in the update:

 

CompVer.inc

Shared include file to detect version of Delphi (D2005 and later only)

TypeTrans.pas

 

Rio.pas

 

InvokeRegistry.pas

 

OPToSOAPDomConv.pas

 

WebServExp.pas

 

WSDLPub.pas

 

XSBuiltIns.pas

 

PrivateHeap.pas

Included for D7 and D2005 users. Resolves DEP issue.

SoapHTTPTrans.pas

 

 

 

In addition to the above files, the WSDLImp.exe utility is also included in this update. WSDLImp is used to generate Delphi bindings from a WSDL document describing a WebService.

 

 

Using with BDS 2006

To use the updated runtime in BDS2006:

 

  • Unzip the runtime update files. NOTE: Do *NOT* overwrite your SOAP sources (typically located at $(BDS)\Source\Win32\soap). Or if you do, please make a backup copy of the original files.
  • Add the location of the runtime update files to your project’s ‘Search Path’ options.
  • Unzip the WSDLImp utility. NOTE: Do *NOT* overwrite your existing WSDLImp.exe typically located in $(BDS)\bin.
  • Regenerate the .pas files for any previously imported WSDL document using the updated WSDLImp utility.
  • Rebuild your project.

 

 

Using with BDS2005/D7

  • Unzip the runtime update files. NOTE: Do *NOT* overwrite your SOAP sources (typically located in $(DELPHI)\Source\soap for D7 and $(BDS)\Source\Win32\Soap for BDS2005). Or if you do, please make a backup copy of the original files.
  • Add the location of the runtime update files to your project’s ‘Search Path’ options.
  • Unzip the WSDLImp utility. NOTE: Do *NOT* overwrite your existing WSDLImp.exe (typically located in $(DELPHI)\bin for D7 and $(BDS)\bin for BDS2005).
  • Regenerate the .pas files for any previously imported WSDL document using the updated WSDLImp utility.
  • If you want to use the runtime update in an interface-compatible mode, rebuild your project and you’re done.
  • If you want to enable all of D2006/7 SOAP fixes/enhancements:
    •  Add the Soap source directory [$(DELPHI)\Source\Soap or $(BDS)\Source\Win32\Soap] to your project’s ‘Search Path’ *AFTER* the directory of the runtime update files.
    • For D7 add the following to the ‘Conditional defines’ of your project’s options: CLEANUP_SOAP_HEADERS;FIX_ELEM_NODE_NS
    • For BDS2005 add the following to the ‘Conditional defines’ of your project’s options: FIX_ELEM_NODE_NS
    • Rebuild your project.

 

 

Build Errors

This section describes errors you might encounter when building your project with the updated runtime:

  • D7 and BDS2005 setups might run into the ‘Unit xxxx was built with a different version of yyyy.zzzz’ error message when enabling all the fixes/enhancements. This error indicates that you have some .dcu that was built with the original Soap interfaces that’s not getting rebuilt. If ‘xxxx’ refers to a Delphi SOAP runtime file that’s not included in the update, make sure that you have added your Soap source directory to the project’s ‘Search Path’ *AFTER* the directory that contains the runtime update files. If ‘xxxx’ refers to a non Delphi SOAP runtime unit, you’ll need to make sure that the source to that unit is in the project’s ‘Search Path’ so it can be rebuilt. If you do not have the source code to the unit you will have to use the updated runtime in the interface-compatible mode – i.e. without enabling all fixes/enhancements.

 

 

The Updated WSDLImp Utility

The new importer generates code that requires the updated runtime because of the way it encodes the traits of an XML element into a published property. Previous importers used the ‘stored’ value of ‘property’ declarations to flag arrays that mapped to unbounded XML elements or simple types that should be stored as XML attributes. Since ‘stored’ allows for only a Boolean value, this approach did not cater for other traits of an XML element. The new importer uses the ‘Index’ value of ‘property’ declarations to tag optional, unbounded, text, etc. Note that the updated runtime supports the use of the ‘stored’ value generated by earlier importers.

 

 

Feedback

Please post any feedback regarding the update to the Borland.public.delphi.soap or Borland.public.delphi.wsdl newsgroups. Or feel free to email me directly at bbabet@codegear.com. Thank you.

 

Change Log

The following is not an exhaustive list of the changes. It’s a list of the ones I could easily spot by running through check-in logs:

 

QC#7954   Memory leak in WSDL publishing logic for complex types

QC#9550   Handle '0' and '1' as valid boolean values

QC#9547   Support for time-zones with no transition dates

QC#15336  SOAP runtime modifies 'DecimalSeparator' global (Also #QC#5636, #30095, #20405)

QC#38057  Dynamic array serialization mishandles ref-count (Also QC#21223)

QC#38709  Support for polymorphic types (illustrated using MapPoint.NET) - (Also QC#32718)

QC#28012  Bug in TXSDuration.GetDecimalSecond

QC#28003  Incorrect namespace on element nodes (Also QC#31185)

QC#8397   OnBeforeExecute ignores changes to SOAPRequest variable

QC#31556  AV on deserializing empty string as dateTime.

QC#10969  Handle XML attributes that map to TXSxxxx types

QC#26063  Fix performance when handling multiref nodes and arrays

QC#26373  Remove unnecessary formatting of XML

QC#15331  Delphi-generated WSDLs are rejected by Java WSDL importers

QC#22485  Array Deserialization logic does not handle non-ntElement (such as comment) nodes

QC#3980   Logic that serializes array properties AV when a setter is used

QC#33205  Importer mishandles cases where wrapper element does not match operation name (NOTE: We won't unwrap anymore).

 

 

 

Importer issues:

(a) Various issues QC#31143, for Amazon'

(b) Incorrect code generated Amazon's Alexa (QC#11920)

(c) Incorrect code generated for Inline enumerations (QC#9309),

(d) No Unbounded element support (QC#240056, 28062, 30712)

(e) AV on GoogleSearch

(f) Need to check Assigned(X) before invoking X.Free.

(g) Incorrect code for Complex type with simple content (Amazon's "Creator" for example)

(h) Incorrect code gen. for eBay's WSDL

(i) Does not properly decide when to unwrap doc|lit services

(j) Does not support imported or included schemas

 

 

Misc:

Serialization of zeroed-out array of bytes fixed

Now sets utf-8 in HTTP content-type header to support international characters (XML is already utf-8 encoded)

TXSxxxx types have sensible defaults. For example, TXSDateTime defaults to "0001-01-01T00:00:00" instead of "1899-12-30T00:00:00.000".