-
Balu Krishnasamy
- PowerBuilder
- Wednesday, 6 August 2025 10:57 PM UTC
PB Version: 2022 R3 Build 3356 / OS: various including Win11 - 32 Bit
Hello PB Gurus -
We replaced our SOAP based integration with the HTTPClient object (using XML) last year. Ever since, we have been seeing quite a lot of errors in our error logs. The error is written when the XMLParseString gets applied on the response data from the "getResponseBody" fn.
The reason for the error (in all scenario) is because the response data is being returned as an empty string and applying XMLParseString returns the below error which seems obvious.
XML Validation failed! Error parsing XML document: | invalid document structure | PBSaxParser, Line: 1, Position: 1.
The question i couldn't answer is, Why is the response data from the "getResponseBody" fn. return an empty string in "some" cases?
The calls previously made using the exact same request would be responded with a proper xml. The intermittent nature is what is making this worse.
The response from the server in all cases seems to be a fully formed XML no matter how many times we place the request.
(This is how SOAP UI also responds back for the request we send even for the one where the getResponseBody returns an emtpy string. Please see below.)
Any help is highly appreciated. Thanks much!
Code:
HttpClient lnv_HttpClient
If NOT IsValid( lnv_HttpClient ) Then
lnv_httpclient = CREATE HttpClient
If NOT IsValid( lnv_httpclient ) Then Return -1
End If
//lnv_httpClient.SetRequestheader( 'Content-Type', 'text/xml')
Note: Previously we were setting the above content-type as part of the header but after commenting this line out, the error count seems to have decreased.
But its still out there.
Also, tried to set the Encoding Type to UTF-8 as part of the header but that made it worse as "some" of the requests would fail
(sendRequest returns a negative value).
Commenting this out didn't make any difference in terms of the response.
li_ret = lnv_httpclient.sendrequest( 'POST', <our endpoint here>, <request xml. Ex. see below>)
If li_ret = 1 Then
//Get the respose status code & text
ll_statusCode = lnv_httpclient.GetResponseStatusCode( )
ls_statusText = lnv_httpclient.GetResponseStatusText( )
//Get the response headers ex. "text/xml;charset=UTF-8"
ls_ContentType = lnv_httpclient.GetResponseHeader("Content-Type")
//Get the response body(XML)
li_ret = lnv_httpclient.GetResponseBody( ls_responseBody )
If ( ll_statusCode >= 200 and ll_statusCode< 400 ) Then
// Is the response a valid XML?
li_XMLParse = XMLParseString( ls_responseBody, ValAuto!, ls_responseParserError )
If li_XMLParse <> 0 Then
lb_xmlParseFailed = True
//Not a Valid XML. Parsing resulted in an error. Try reparing the XML with a different encoding!
of_log( "Default Encoding - XML validation failed. Error: " + ls_responseParserError )
If Not IsNull( ls_responseBody ) AND Len( ls_responseBody ) > 0 Then
..
..
..
Else
//Valid XML. Parsing Successful.
lb_xmlParseFailed = False
End If
End If
..
..
..
End If
If isValid( lnv_httpclient ) Then Destroy lnv_httpclient
Example of a request XML:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:idex="http://www.xyz.com/xyzServices-1.5">
<soapenv:Header/>
<soapenv:Body>
<xyz:servicename>
<arg0>
<abc>somevalue</abc>
<def>somevalue</def>
<ghi>somevalue</ghi>
<jkl><![CDATA[23327]]></jkl>
</arg0>
</xyz:servicename>
</soapenv:Body>
</soapenv:Envelope>
The same request above rendered using SOAPUI ALWAYS works and responds with a well formed xml .
Even if there are no data, a well formed xml like the one below gets returned.
Example of a response where there is no data to return.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:servicename xmlns:ns2="http://www.xyz.com/xyzServices-1.5" xmlns:ns3="http://www.xyz.com/xyzServices-1.45"/>
</soap:Body>
</soap:Envelope>
Find Questions by Tag
Helpful?
If a reply or comment is helpful for you, please don’t hesitate to click the Helpful button. This action is further confirmation of their invaluable contribution to the Appeon Community.