Web Services changes
There are changes in support of web services in Genero 3.20.
XML serializer is case sensitive
From FGLGWS 3.20 on, the XML serializer is case sensitive, same as the JSON serializer. This means that the serializer uses the case of the variable name as defined in the 4GL file.
What impact has this on my existing Web services? It is recommended to:
- Generate a new client and server stub via the fglwsdl tool.
- The tool has an enhancement which does not generate
XMLName
attributes, unless they are really needed. - If you do not generate the stub, the
XMLName
attribute is still taken into account, so it should not have any impact.
- The tool has an enhancement which does not generate
- Check on server sides that all published SOAP web services input and output records are in lower case. This ensures compatibility with older versions. If backward compatibility is not an issue, then you must query the server WSDL file and generate the client stub from it.
For more details, see Customizing XML serialization.
Control HTTP Date header for GET, HEAD and DELETE requests
Starting with GWS 3.20.00, the FGLPROFILE entry http.global.request.date
can be
used to control whether GWS HTTP GET, HEAD and DELETE requests must send the HTTP Date header.
For more details, see HTTP configuration.
Support for empty HTTP POST or PUT requests
DEFINE req com.HTTPRequest
LET req = com.HTTPRequest.Create("http://tempuri.org")
CALL req.setMethod("POST") # or PUT
CALL req.doRequest()
Prior to GWS 3.20.01, the doRequest()
call returned error code -15555 and the
error message "Unsupported request-response feature".
readTextRequest()
will be
NULL
:DEFINE ser com.HTTPServiceRequest
DEFINE txt STRING
LET ser = com.WebServiceEngine.getHttpServiceRequest(-1)
IF ser.getMethod() == "POST" THEN
LET txt = ser.readTextRequest()
IF txt IS NULL THEN
DISPLAY "No body"
END IF
END IF
Notice however that the Content-Type is still checked and may raise an error, if it doesn't
match. So using readXmlRequest()
must have a Content-Type of xml format, even if
the body is empty. In practice, it is recommended to check the Content-Type before doing any read
operation.
For more details, see com.HTTPRequest.doRequest.
New high-level RESTful framework
Genero BDL 3.20 provides a new framework for RESTful Web services programming.