KDSoap 1.8.0 released lots of improvements and bug fixes since 1.7.0
KDAB has released a new version of KDSoap. This is version 1.8.0 and comes more than one year since the last release (1.7.0).
KDSoap is a tool for creating client applications for web services without the need for any further component such as a dedicated web server.
KDSoap lets you interact with applications which have APIs that can be exported as SOAP objects. The web service then provides a machine-accessible interface to its functionality via HTTP. Find out more...
Version 1.8.0 has a large number of improvements and fixes:
General
- Fixed internally-created faults lacking an XML element name (so e.g. toXml() would abort)
- KDSoapMessage::messageAddressingProperties() is now correctly filled in when receiving a message with WS-Addressing in the header
Client-side
- Added support for timing out requests (default 30 minutes, configurable with KDSoapClientInterface::setTimeout())
- Added support for soap 1.2 faults in faultAsString()
- Improved detection of soap 1.2 faults in HTTP response
- Stricter namespace check for Fault elements being received
- Report client-generated faults as SOAP 1.2 if selected
- Fixed error code when authentication failed
- Autodeletion of jobs is now configurable (github pull #125)
- Added error details in faultAsString() – and the generated lastError() – coming from the SOAP 1.2 detail element.
- Fixed memory leak in KDSoapClientInterface::callNoReply
- Added support for WS-UsernameToken, see KDSoapAuthentication
- Extended KDSOAP_DEBUG functionality (e.g. “KDSOAP_DEBUG=http,reformat” will now print http-headers and pretty-print the xml)
- Added support for specifying requestHeaders as part of KDSoapJob via KDSoapJob::setRequestHeaders()
- Renamed the missing KDSoapJob::returnHeaders() to KDSoapJob::replyHeaders(), and provide an implementation
- Made KDSoapClientInterface::soapVersion() const
- Added lastFaultCode() for error handling after sync calls. Same as lastErrorCode() but it returns a QString rather than an int.
- Added conversion operator from KDDateTime to QVariant to void implicit conversion to base QDateTime (github issue #123).
Server-side
- New method KDSoapServerObjectInterface::additionalHttpResponseHeaderItems to let server objects return additional http headers. This can be used to implement support for CORS, using KDSoapServerCustomVerbRequestInterface to implement OPTIONS response, with “Access-Control-Allow-Origin” in the headers of the response (github issue #117).
- Stopped generation of two job classes with the same name, when two bindings have the same operation name. Prefixed one of them with the binding name (github issue #139 part 1)
- Prepended this-> in method class to avoid compilation error when the variable and the method have the same name (github issue #139 part 2)
WSDL parser / code generator changes, applying to both client and server side
- Source incompatible change: all deserialize() functions now require a KDSoapValue instead of a QVariant. If you use a deserialize(QVariant) function, you need to port your code to use KDSoapValue::setValue(QVariant) before deserialize()
- Source incompatible change: all serialize() functions now return a KDSoapValue instead of a QVariant. If you use a QVariant serialize() function, you need to port your code to use QVariant KDSoapValue::value() after serialize()
- Source incompatible change: xs:QName is now represented by KDQName instead of QString, which allows the namespace to be extracted. The old behaviour is available via KDQName::qname().
- Fixed double-handling of empty elements
- Fixed fault elements being generated in the wrong namespace, must be SOAP-ENV:Fault (github issue #81).
- Added import-path argument for setting the local path to get (otherwise downloaded) files from.
- Added -help-on-missing option to kdwsdl2cpp to display extra help on missing types.
- Added C++17 std::optional as possible return value for optional elements.
- Added -both to create both header(.h) and implementation(.cpp) files in one run
- Added -namespaceMapping @mapping.txt to import url=code mappings, affects C++ class name generation
- Added functionality to prevent downloading the same WSDL/XSD file twice in one run
- Added “hasValueFor{MemberName}()” accessor function, for optional elements
- Generated services now include soapVersion() and endpoint() accessors to match the setSoapVersion(…) and setEndpoint(…) mutators
- Added support for generating messages for WSDL files without services or bindings
- Fixed erroneous QT_BEGIN_NAMESPACE around forward-declarations like Q17__DialogType.
- KDSoapValue now stores the namespace declarations during parsing of a message and writes
- namespace declarations during sending of a message
- Avoid serialize crash with required polymorphic types, if the required variable wasn’t actually provided
- Fixed generated code for restriction to base class (it wouldn’t compile)
- Prepended “undef daylight” and “undef timezone” to all generated files, to fix compilation errors in wsdl files that use those names, due to nasty Windows macros
- Added generation for default attribute values.
KD SOAP is available under a LGPL license and can be downloaded from: https://github.com/KDAB/KDSoap