Files
MBS/WEBSERVICES/calculator/client/ws_calculatorSoap12.4gl
T

2076 lines
71 KiB
Plaintext

#-------------------------------------------------------------------------------
# File: ws_calculatorSoap12.4gl
# GENERATED BY fglwsdl 202111081619
#-------------------------------------------------------------------------------
# THIS FILE WAS GENERATED. DO NOT MODIFY.
#-------------------------------------------------------------------------------
IMPORT FGL WSHelper
IMPORT com
IMPORT xml
IMPORT security
IMPORT os
GLOBALS "ws_calculatorSoap12.inc"
#-------------------------------------------------------------------------------
# Service: Calculator
# Port: CalculatorPortTypeSoap12
# Server: http://localhost:8090
#-------------------------------------------------------------------------------
PRIVATE DEFINE AddHTTPReq com.HTTPRequest
PRIVATE DEFINE AddHTTPResp com.HTTPResponse
PRIVATE DEFINE SubtractHTTPReq com.HTTPRequest
PRIVATE DEFINE SubtractHTTPResp com.HTTPResponse
PRIVATE DEFINE MultiplyHTTPReq com.HTTPRequest
PRIVATE DEFINE MultiplyHTTPResp com.HTTPResponse
PRIVATE DEFINE DivideHTTPReq com.HTTPRequest
PRIVATE DEFINE DivideHTTPResp com.HTTPResponse
#-------------------------------------------------------------------------------
#
# Operation: Add
#
#
# FUNCTION: Add
#
FUNCTION Add(p_a, p_b)
DEFINE p_a INTEGER
DEFINE p_b INTEGER
DEFINE soapStatus INTEGER
LET Add.a = p_a
LET Add.b = p_b
LET soapStatus = Add_g()
RETURN soapStatus, AddResponse.r
END FUNCTION
#
# FUNCTION: Add_g
# RETURNING: soapStatus
# INPUT: GLOBAL Add
# OUTPUT: GLOBAL AddResponse
#
FUNCTION Add_g()
DEFINE wsstatus INTEGER
DEFINE retryAuth INTEGER
DEFINE retryProxy INTEGER
DEFINE retry INTEGER
DEFINE fault BOOLEAN
DEFINE nb INTEGER
DEFINE uri STRING
DEFINE setcookie STRING
DEFINE mustUnderstand INTEGER
DEFINE request com.HTTPRequest
DEFINE response com.HTTPResponse
DEFINE writer xml.StaxWriter
DEFINE reader xml.StaxReader
#
# INIT VARIABLES
#
LET wsstatus = -1
LET retryAuth = FALSE
LET retryProxy = FALSE
LET retry = TRUE
LET fault = FALSE
LET uri = com.WebServiceEngine.GetOption("SoapModuleURI")
IF Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri IS NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri = "http://localhost:8090"
END IF
#
# CREATE REQUEST
#
TRY
LET request = com.HTTPRequest.Create(Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
CALL request.setMethod("POST")
CALL request.setCharset("UTF-8")
CALL request.setHeader("Content-Type","application/soap+xml; action=\"\"")
CALL WSHelper_SetRequestHeaders(request, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Request.Headers)
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version IS NOT NULL THEN
CALL request.setVersion(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie IS NOT NULL THEN
CALL request.setHeader("Cookie",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout <> 0 THEN
CALL request.setConnectionTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout <> 0 THEN
CALL request.setTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest IS NOT NULL THEN
CALL request.setHeader("Content-Encoding",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest)
END IF
CALL request.setHeader("Accept-Encoding","gzip, deflate")
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender","Cannot create HTTPRequest")
RETURN wsstatus
END TRY
# START LOOP
WHILE retry
LET retry = FALSE
#
# Stax request
#
TRY
LET writer = request.beginXmlRequest()
CALL WSHelper_WriteStaxSOAP12StartEnvelope(writer)
CALL WSHelper_WriteStaxSOAP12StartBody(writer)
#
# STAX SOAP REQUEST SERIALIZE
#
CALL xml.Serializer.VariableToStax(Add,writer)
CALL WSHelper_WriteStaxSOAP12EndBody(writer)
CALL WSHelper_WriteStaxSOAP12EndEnvelope(writer)
CALL request.endXmlRequest(writer)
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender",SQLCA.SQLERRM)
RETURN wsstatus
END TRY
#
# PROCESS RESPONSE
#
TRY
LET response = request.getResponse()
#
# RETRIEVE SERVICE SESSION COOKIE
#
LET setcookie = response.getHeader("Set-Cookie")
IF setcookie IS NOT NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie = WSHelper_ExtractServerCookie(setcookie,Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
END IF
#
# RETRIEVE HTTP RESPONSE Headers
#
CALL WSHelper_SetResponseHeaders(response, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Response.Headers)
CASE
WHEN response.getStatusCode()==200 OR response.getStatusCode()==500
#
# Check SOAP 1.2 MimeType
#
IF NOT WSHelper_CheckSOAP12HttpMimeType(response) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE OR FAULT
#
LET reader = response.beginXmlResponse() # Begin Streaming Response
IF NOT WSHelper_ReadStaxSOAP12StartEnvelope(reader) THEN
EXIT CASE
END IF
# Process SOAP headers
LET nb = 0
IF WSHelper_CheckStaxSOAP12Header(reader) AND NOT reader.isEmptyElement() THEN
CALL reader.nextTag()
WHILE (reader.getEventType()=="START_ELEMENT")
IF WSHelper_CheckStaxSOAP12HeaderRole(reader,uri) THEN
LET mustUnderstand = WSHelper_GetStaxSOAP12HeaderMustUnderstand(reader)
IF mustUnderstand = -1 THEN
CALL WSHelper_FillSOAP12WSError("Sender","Invalid mustUnderstand value")
EXIT CASE
END IF
#
# STAX SOAP RESPONSE HEADER DESERIALIZE
#
IF mustUnderstand THEN
CALL WSHelper_FillSOAP12WSError("MustUnderstand","Mandatory header block not understood")
EXIT CASE
ELSE
CALL reader.nextSibling() # Skip header, not necessary
END IF
ELSE
CALL reader.nextSibling() # Skip header, not intended to us
END IF
END WHILE
IF NOT WSHelper_CheckStaxSOAP12Header(reader) THEN
CALL WSHelper_FillSOAP12WSError("Sender","No ending header tag found")
EXIT CASE
ELSE
CALL reader.nextTag()
END IF
ELSE
IF reader.isEmptyElement() THEN
CALL reader.nextTag()
END IF
END IF
IF NOT WSHelper_ReadStaxSOAP12StartBody(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12StartFault(reader) THEN # Handle SOAP Fault
LET fault = TRUE
CALL reader.nextTag()
IF NOT WSHelper_ReadStaxSOAP12FaultUntilDetail(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12FaultDetail(reader) THEN
#
# STAX SOAP FAULT DESERIALIZE
#
CALL reader.nextSibling() # Skip SOAP detail
END IF
IF NOT WSHelper_ReadStaxSOAP12EndFault(reader) THEN
EXIT CASE
END IF
ELSE # Handle SOAP Response
IF nb != 0 THEN # Check mandatory headers
CALL WSHelper_FillSOAP12WSError("Sender","Headers are missing")
EXIT CASE
END IF
IF NOT WSHelper_RetrieveStaxSOAP12Message(reader) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE DESERIALIZE
#
CALL xml.Serializer.StaxToVariable(reader,AddResponse)
END IF
IF NOT WSHelper_ReadStaxSOAP12EndBody(reader) THEN
EXIT CASE
END IF
IF NOT WSHelper_ReadStaxSOAP12EndEnvelope(reader) THEN
EXIT CASE
END IF
# End Streaming Response
CALL response.endXmlResponse(reader)
IF NOT fault THEN
LET wsstatus = 0
END IF
WHEN response.getStatusCode()==401 # HTTP Authentication
IF retryAuth THEN
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error 401 ("||response.getStatusDescription()||")")
ELSE
LET retryAuth = TRUE
LET retry = TRUE
END IF
WHEN response.getStatusCode()==407 # Proxy Authentication
IF retryProxy THEN
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error 407 ("||response.getStatusDescription()||")")
ELSE
LET retryProxy = TRUE
LET retry = TRUE
END IF
OTHERWISE
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error "||response.getStatusCode()||" ("||response.getStatusDescription()||")")
END CASE
CATCH
LET wsstatus = status
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
RETURN wsstatus
END TRY
# END LOOP
END WHILE
RETURN wsstatus
END FUNCTION
FUNCTION AddRequest_g()
DEFINE wsstatus INTEGER
DEFINE writer xml.StaxWriter
#
# CHECK PREVIOUS CALL
#
IF AddHTTPReq IS NOT NULL AND AddHTTPResp IS NULL THEN
# Request was sent but there was no response yet
CALL WSHelper_FillSOAP12WSError("Sender","Cannot issue a new request until previous response was received")
RETURN -2 # waiting for the response
ELSE
IF Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri IS NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri = "http://localhost:8090"
END IF
END IF
#
# CREATE REQUEST
#
TRY
LET AddHTTPReq = com.HTTPRequest.Create(Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
CALL AddHTTPReq.setMethod("POST")
CALL AddHTTPReq.setCharset("UTF-8")
CALL AddHTTPReq.setHeader("Content-Type","application/soap+xml; action=\"\"")
CALL WSHelper_SetRequestHeaders(AddHTTPReq, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Request.Headers)
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version IS NOT NULL THEN
CALL AddHTTPReq.setVersion(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie IS NOT NULL THEN
CALL AddHTTPReq.setHeader("Cookie",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout <> 0 THEN
CALL AddHTTPReq.setConnectionTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout <> 0 THEN
CALL AddHTTPReq.setTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest IS NOT NULL THEN
CALL AddHTTPReq.setHeader("Content-Encoding",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest)
END IF
CALL AddHTTPReq.setHeader("Accept-Encoding","gzip, deflate")
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender","Cannot create HTTPRequest")
LET AddHTTPReq = NULL
RETURN wsstatus
END TRY
#
# Stax request
#
TRY
LET writer = AddHTTPReq.beginXmlRequest()
CALL WSHelper_WriteStaxSOAP12StartEnvelope(writer)
CALL WSHelper_WriteStaxSOAP12StartBody(writer)
#
# STAX SOAP REQUEST SERIALIZE
#
CALL xml.Serializer.VariableToStax(Add,writer)
CALL WSHelper_WriteStaxSOAP12EndBody(writer)
CALL WSHelper_WriteStaxSOAP12EndEnvelope(writer)
CALL AddHTTPReq.endXmlRequest(writer)
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender",SQLCA.SQLERRM)
LET AddHTTPReq = NULL
RETURN wsstatus
END TRY
#
# PROCESS RESPONSE
#
TRY
LET AddHTTPResp = AddHTTPReq.getAsyncResponse()
RETURN 0 # SUCCESS
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
LET AddHTTPReq = NULL
RETURN wsstatus
END TRY
END FUNCTION
FUNCTION AddResponse_g()
DEFINE wsstatus INTEGER
DEFINE fault BOOLEAN
DEFINE nb INTEGER
DEFINE uri STRING
DEFINE setcookie STRING
DEFINE mustUnderstand INTEGER
DEFINE reader xml.StaxReader
LET fault = FALSE
LET wsstatus = -1
LET uri = com.WebServiceEngine.GetOption("SoapModuleURI")
#
# CHECK PREVIOUS CALL
#
IF AddHTTPReq IS NULL THEN
# No request was sent
CALL WSHelper_FillSOAP12WSError("Sender","No request has been sent")
RETURN -1
END IF
TRY
#
# PROCESS RESPONSE
#
IF AddHTTPResp IS NULL THEN
# Still no response, try again
LET AddHTTPResp = AddHTTPReq.getAsyncResponse()
END IF
IF AddHTTPResp IS NULL THEN
# We got no response, still waiting for
CALL WSHelper_FillSOAP12WSError("Sender","Response was not yet received")
RETURN -2
END IF
#
# RETRIEVE SERVICE SESSION COOKIE
#
LET setcookie = AddHTTPResp.getHeader("Set-Cookie")
IF setcookie IS NOT NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie = WSHelper_ExtractServerCookie(setcookie,Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
END IF
#
# RETRIEVE HTTP RESPONSE Headers
#
CALL WSHelper_SetResponseHeaders(AddHTTPResp, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Response.Headers)
CASE
WHEN AddHTTPResp.getStatusCode()==200 OR AddHTTPResp.getStatusCode()==500
#
# Check SOAP 1.2 MimeType
#
IF NOT WSHelper_CheckSOAP12HttpMimeType(AddHTTPResp) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE OR FAULT
#
LET reader = AddHTTPResp.beginXmlResponse() # Begin Streaming Response
IF NOT WSHelper_ReadStaxSOAP12StartEnvelope(reader) THEN
EXIT CASE
END IF
# Process SOAP headers
LET nb = 0
IF WSHelper_CheckStaxSOAP12Header(reader) AND NOT reader.isEmptyElement() THEN
CALL reader.nextTag()
WHILE (reader.getEventType()=="START_ELEMENT")
IF WSHelper_CheckStaxSOAP12HeaderRole(reader,uri) THEN
LET mustUnderstand = WSHelper_GetStaxSOAP12HeaderMustUnderstand(reader)
IF mustUnderstand = -1 THEN
CALL WSHelper_FillSOAP12WSError("Sender","Invalid mustUnderstand value")
EXIT CASE
END IF
#
# STAX SOAP RESPONSE HEADER DESERIALIZE
#
IF mustUnderstand THEN
CALL WSHelper_FillSOAP12WSError("MustUnderstand","Mandatory header block not understood")
EXIT CASE
ELSE
CALL reader.nextSibling() # Skip header, not necessary
END IF
ELSE
CALL reader.nextSibling() # Skip header, not intended to us
END IF
END WHILE
IF NOT WSHelper_CheckStaxSOAP12Header(reader) THEN
CALL WSHelper_FillSOAP12WSError("Sender","No ending header tag found")
EXIT CASE
ELSE
CALL reader.nextTag()
END IF
ELSE
IF reader.isEmptyElement() THEN
CALL reader.nextTag()
END IF
END IF
IF NOT WSHelper_ReadStaxSOAP12StartBody(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12StartFault(reader) THEN # Handle SOAP Fault
LET fault = TRUE
CALL reader.nextTag()
IF NOT WSHelper_ReadStaxSOAP12FaultUntilDetail(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12FaultDetail(reader) THEN
#
# STAX SOAP FAULT DESERIALIZE
#
CALL reader.nextSibling() # Skip SOAP detail
END IF
IF NOT WSHelper_ReadStaxSOAP12EndFault(reader) THEN
EXIT CASE
END IF
ELSE # Handle SOAP Response
IF nb != 0 THEN # Check mandatory headers
CALL WSHelper_FillSOAP12WSError("Sender","Headers are missing")
EXIT CASE
END IF
IF NOT WSHelper_RetrieveStaxSOAP12Message(reader) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE DESERIALIZE
#
CALL xml.Serializer.StaxToVariable(reader,AddResponse)
END IF
IF NOT WSHelper_ReadStaxSOAP12EndBody(reader) THEN
EXIT CASE
END IF
IF NOT WSHelper_ReadStaxSOAP12EndEnvelope(reader) THEN
EXIT CASE
END IF
# End Streaming Response
CALL AddHTTPResp.endXmlResponse(reader)
IF NOT fault THEN
LET wsstatus = 0
END IF
OTHERWISE
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error "||AddHTTPResp.getStatusCode()||" ("||AddHTTPResp.getStatusDescription()||")")
END CASE
CATCH
LET wsstatus = status
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
END TRY
#
# RESET VARIABLES
#
LET AddHTTPReq = NULL
LET AddHTTPResp = NULL
RETURN wsstatus
END FUNCTION
#
# Operation: Subtract
#
#
# FUNCTION: Subtract
#
FUNCTION Subtract(p_a, p_b)
DEFINE p_a INTEGER
DEFINE p_b INTEGER
DEFINE soapStatus INTEGER
LET Subtract.a = p_a
LET Subtract.b = p_b
LET soapStatus = Subtract_g()
RETURN soapStatus, SubtractResponse.r
END FUNCTION
#
# FUNCTION: Subtract_g
# RETURNING: soapStatus
# INPUT: GLOBAL Subtract
# OUTPUT: GLOBAL SubtractResponse
#
FUNCTION Subtract_g()
DEFINE wsstatus INTEGER
DEFINE retryAuth INTEGER
DEFINE retryProxy INTEGER
DEFINE retry INTEGER
DEFINE fault BOOLEAN
DEFINE nb INTEGER
DEFINE uri STRING
DEFINE setcookie STRING
DEFINE mustUnderstand INTEGER
DEFINE request com.HTTPRequest
DEFINE response com.HTTPResponse
DEFINE writer xml.StaxWriter
DEFINE reader xml.StaxReader
#
# INIT VARIABLES
#
LET wsstatus = -1
LET retryAuth = FALSE
LET retryProxy = FALSE
LET retry = TRUE
LET fault = FALSE
LET uri = com.WebServiceEngine.GetOption("SoapModuleURI")
IF Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri IS NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri = "http://localhost:8090"
END IF
#
# CREATE REQUEST
#
TRY
LET request = com.HTTPRequest.Create(Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
CALL request.setMethod("POST")
CALL request.setCharset("UTF-8")
CALL request.setHeader("Content-Type","application/soap+xml; action=\"\"")
CALL WSHelper_SetRequestHeaders(request, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Request.Headers)
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version IS NOT NULL THEN
CALL request.setVersion(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie IS NOT NULL THEN
CALL request.setHeader("Cookie",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout <> 0 THEN
CALL request.setConnectionTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout <> 0 THEN
CALL request.setTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest IS NOT NULL THEN
CALL request.setHeader("Content-Encoding",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest)
END IF
CALL request.setHeader("Accept-Encoding","gzip, deflate")
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender","Cannot create HTTPRequest")
RETURN wsstatus
END TRY
# START LOOP
WHILE retry
LET retry = FALSE
#
# Stax request
#
TRY
LET writer = request.beginXmlRequest()
CALL WSHelper_WriteStaxSOAP12StartEnvelope(writer)
CALL WSHelper_WriteStaxSOAP12StartBody(writer)
#
# STAX SOAP REQUEST SERIALIZE
#
CALL xml.Serializer.VariableToStax(Subtract,writer)
CALL WSHelper_WriteStaxSOAP12EndBody(writer)
CALL WSHelper_WriteStaxSOAP12EndEnvelope(writer)
CALL request.endXmlRequest(writer)
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender",SQLCA.SQLERRM)
RETURN wsstatus
END TRY
#
# PROCESS RESPONSE
#
TRY
LET response = request.getResponse()
#
# RETRIEVE SERVICE SESSION COOKIE
#
LET setcookie = response.getHeader("Set-Cookie")
IF setcookie IS NOT NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie = WSHelper_ExtractServerCookie(setcookie,Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
END IF
#
# RETRIEVE HTTP RESPONSE Headers
#
CALL WSHelper_SetResponseHeaders(response, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Response.Headers)
CASE
WHEN response.getStatusCode()==200 OR response.getStatusCode()==500
#
# Check SOAP 1.2 MimeType
#
IF NOT WSHelper_CheckSOAP12HttpMimeType(response) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE OR FAULT
#
LET reader = response.beginXmlResponse() # Begin Streaming Response
IF NOT WSHelper_ReadStaxSOAP12StartEnvelope(reader) THEN
EXIT CASE
END IF
# Process SOAP headers
LET nb = 0
IF WSHelper_CheckStaxSOAP12Header(reader) AND NOT reader.isEmptyElement() THEN
CALL reader.nextTag()
WHILE (reader.getEventType()=="START_ELEMENT")
IF WSHelper_CheckStaxSOAP12HeaderRole(reader,uri) THEN
LET mustUnderstand = WSHelper_GetStaxSOAP12HeaderMustUnderstand(reader)
IF mustUnderstand = -1 THEN
CALL WSHelper_FillSOAP12WSError("Sender","Invalid mustUnderstand value")
EXIT CASE
END IF
#
# STAX SOAP RESPONSE HEADER DESERIALIZE
#
IF mustUnderstand THEN
CALL WSHelper_FillSOAP12WSError("MustUnderstand","Mandatory header block not understood")
EXIT CASE
ELSE
CALL reader.nextSibling() # Skip header, not necessary
END IF
ELSE
CALL reader.nextSibling() # Skip header, not intended to us
END IF
END WHILE
IF NOT WSHelper_CheckStaxSOAP12Header(reader) THEN
CALL WSHelper_FillSOAP12WSError("Sender","No ending header tag found")
EXIT CASE
ELSE
CALL reader.nextTag()
END IF
ELSE
IF reader.isEmptyElement() THEN
CALL reader.nextTag()
END IF
END IF
IF NOT WSHelper_ReadStaxSOAP12StartBody(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12StartFault(reader) THEN # Handle SOAP Fault
LET fault = TRUE
CALL reader.nextTag()
IF NOT WSHelper_ReadStaxSOAP12FaultUntilDetail(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12FaultDetail(reader) THEN
#
# STAX SOAP FAULT DESERIALIZE
#
CALL reader.nextSibling() # Skip SOAP detail
END IF
IF NOT WSHelper_ReadStaxSOAP12EndFault(reader) THEN
EXIT CASE
END IF
ELSE # Handle SOAP Response
IF nb != 0 THEN # Check mandatory headers
CALL WSHelper_FillSOAP12WSError("Sender","Headers are missing")
EXIT CASE
END IF
IF NOT WSHelper_RetrieveStaxSOAP12Message(reader) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE DESERIALIZE
#
CALL xml.Serializer.StaxToVariable(reader,SubtractResponse)
END IF
IF NOT WSHelper_ReadStaxSOAP12EndBody(reader) THEN
EXIT CASE
END IF
IF NOT WSHelper_ReadStaxSOAP12EndEnvelope(reader) THEN
EXIT CASE
END IF
# End Streaming Response
CALL response.endXmlResponse(reader)
IF NOT fault THEN
LET wsstatus = 0
END IF
WHEN response.getStatusCode()==401 # HTTP Authentication
IF retryAuth THEN
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error 401 ("||response.getStatusDescription()||")")
ELSE
LET retryAuth = TRUE
LET retry = TRUE
END IF
WHEN response.getStatusCode()==407 # Proxy Authentication
IF retryProxy THEN
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error 407 ("||response.getStatusDescription()||")")
ELSE
LET retryProxy = TRUE
LET retry = TRUE
END IF
OTHERWISE
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error "||response.getStatusCode()||" ("||response.getStatusDescription()||")")
END CASE
CATCH
LET wsstatus = status
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
RETURN wsstatus
END TRY
# END LOOP
END WHILE
RETURN wsstatus
END FUNCTION
FUNCTION SubtractRequest_g()
DEFINE wsstatus INTEGER
DEFINE writer xml.StaxWriter
#
# CHECK PREVIOUS CALL
#
IF SubtractHTTPReq IS NOT NULL AND SubtractHTTPResp IS NULL THEN
# Request was sent but there was no response yet
CALL WSHelper_FillSOAP12WSError("Sender","Cannot issue a new request until previous response was received")
RETURN -2 # waiting for the response
ELSE
IF Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri IS NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri = "http://localhost:8090"
END IF
END IF
#
# CREATE REQUEST
#
TRY
LET SubtractHTTPReq = com.HTTPRequest.Create(Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
CALL SubtractHTTPReq.setMethod("POST")
CALL SubtractHTTPReq.setCharset("UTF-8")
CALL SubtractHTTPReq.setHeader("Content-Type","application/soap+xml; action=\"\"")
CALL WSHelper_SetRequestHeaders(SubtractHTTPReq, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Request.Headers)
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version IS NOT NULL THEN
CALL SubtractHTTPReq.setVersion(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie IS NOT NULL THEN
CALL SubtractHTTPReq.setHeader("Cookie",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout <> 0 THEN
CALL SubtractHTTPReq.setConnectionTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout <> 0 THEN
CALL SubtractHTTPReq.setTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest IS NOT NULL THEN
CALL SubtractHTTPReq.setHeader("Content-Encoding",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest)
END IF
CALL SubtractHTTPReq.setHeader("Accept-Encoding","gzip, deflate")
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender","Cannot create HTTPRequest")
LET SubtractHTTPReq = NULL
RETURN wsstatus
END TRY
#
# Stax request
#
TRY
LET writer = SubtractHTTPReq.beginXmlRequest()
CALL WSHelper_WriteStaxSOAP12StartEnvelope(writer)
CALL WSHelper_WriteStaxSOAP12StartBody(writer)
#
# STAX SOAP REQUEST SERIALIZE
#
CALL xml.Serializer.VariableToStax(Subtract,writer)
CALL WSHelper_WriteStaxSOAP12EndBody(writer)
CALL WSHelper_WriteStaxSOAP12EndEnvelope(writer)
CALL SubtractHTTPReq.endXmlRequest(writer)
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender",SQLCA.SQLERRM)
LET SubtractHTTPReq = NULL
RETURN wsstatus
END TRY
#
# PROCESS RESPONSE
#
TRY
LET SubtractHTTPResp = SubtractHTTPReq.getAsyncResponse()
RETURN 0 # SUCCESS
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
LET SubtractHTTPReq = NULL
RETURN wsstatus
END TRY
END FUNCTION
FUNCTION SubtractResponse_g()
DEFINE wsstatus INTEGER
DEFINE fault BOOLEAN
DEFINE nb INTEGER
DEFINE uri STRING
DEFINE setcookie STRING
DEFINE mustUnderstand INTEGER
DEFINE reader xml.StaxReader
LET fault = FALSE
LET wsstatus = -1
LET uri = com.WebServiceEngine.GetOption("SoapModuleURI")
#
# CHECK PREVIOUS CALL
#
IF SubtractHTTPReq IS NULL THEN
# No request was sent
CALL WSHelper_FillSOAP12WSError("Sender","No request has been sent")
RETURN -1
END IF
TRY
#
# PROCESS RESPONSE
#
IF SubtractHTTPResp IS NULL THEN
# Still no response, try again
LET SubtractHTTPResp = SubtractHTTPReq.getAsyncResponse()
END IF
IF SubtractHTTPResp IS NULL THEN
# We got no response, still waiting for
CALL WSHelper_FillSOAP12WSError("Sender","Response was not yet received")
RETURN -2
END IF
#
# RETRIEVE SERVICE SESSION COOKIE
#
LET setcookie = SubtractHTTPResp.getHeader("Set-Cookie")
IF setcookie IS NOT NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie = WSHelper_ExtractServerCookie(setcookie,Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
END IF
#
# RETRIEVE HTTP RESPONSE Headers
#
CALL WSHelper_SetResponseHeaders(SubtractHTTPResp, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Response.Headers)
CASE
WHEN SubtractHTTPResp.getStatusCode()==200 OR SubtractHTTPResp.getStatusCode()==500
#
# Check SOAP 1.2 MimeType
#
IF NOT WSHelper_CheckSOAP12HttpMimeType(SubtractHTTPResp) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE OR FAULT
#
LET reader = SubtractHTTPResp.beginXmlResponse() # Begin Streaming Response
IF NOT WSHelper_ReadStaxSOAP12StartEnvelope(reader) THEN
EXIT CASE
END IF
# Process SOAP headers
LET nb = 0
IF WSHelper_CheckStaxSOAP12Header(reader) AND NOT reader.isEmptyElement() THEN
CALL reader.nextTag()
WHILE (reader.getEventType()=="START_ELEMENT")
IF WSHelper_CheckStaxSOAP12HeaderRole(reader,uri) THEN
LET mustUnderstand = WSHelper_GetStaxSOAP12HeaderMustUnderstand(reader)
IF mustUnderstand = -1 THEN
CALL WSHelper_FillSOAP12WSError("Sender","Invalid mustUnderstand value")
EXIT CASE
END IF
#
# STAX SOAP RESPONSE HEADER DESERIALIZE
#
IF mustUnderstand THEN
CALL WSHelper_FillSOAP12WSError("MustUnderstand","Mandatory header block not understood")
EXIT CASE
ELSE
CALL reader.nextSibling() # Skip header, not necessary
END IF
ELSE
CALL reader.nextSibling() # Skip header, not intended to us
END IF
END WHILE
IF NOT WSHelper_CheckStaxSOAP12Header(reader) THEN
CALL WSHelper_FillSOAP12WSError("Sender","No ending header tag found")
EXIT CASE
ELSE
CALL reader.nextTag()
END IF
ELSE
IF reader.isEmptyElement() THEN
CALL reader.nextTag()
END IF
END IF
IF NOT WSHelper_ReadStaxSOAP12StartBody(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12StartFault(reader) THEN # Handle SOAP Fault
LET fault = TRUE
CALL reader.nextTag()
IF NOT WSHelper_ReadStaxSOAP12FaultUntilDetail(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12FaultDetail(reader) THEN
#
# STAX SOAP FAULT DESERIALIZE
#
CALL reader.nextSibling() # Skip SOAP detail
END IF
IF NOT WSHelper_ReadStaxSOAP12EndFault(reader) THEN
EXIT CASE
END IF
ELSE # Handle SOAP Response
IF nb != 0 THEN # Check mandatory headers
CALL WSHelper_FillSOAP12WSError("Sender","Headers are missing")
EXIT CASE
END IF
IF NOT WSHelper_RetrieveStaxSOAP12Message(reader) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE DESERIALIZE
#
CALL xml.Serializer.StaxToVariable(reader,SubtractResponse)
END IF
IF NOT WSHelper_ReadStaxSOAP12EndBody(reader) THEN
EXIT CASE
END IF
IF NOT WSHelper_ReadStaxSOAP12EndEnvelope(reader) THEN
EXIT CASE
END IF
# End Streaming Response
CALL SubtractHTTPResp.endXmlResponse(reader)
IF NOT fault THEN
LET wsstatus = 0
END IF
OTHERWISE
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error "||SubtractHTTPResp.getStatusCode()||" ("||SubtractHTTPResp.getStatusDescription()||")")
END CASE
CATCH
LET wsstatus = status
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
END TRY
#
# RESET VARIABLES
#
LET SubtractHTTPReq = NULL
LET SubtractHTTPResp = NULL
RETURN wsstatus
END FUNCTION
#
# Operation: Multiply
#
#
# FUNCTION: Multiply
#
FUNCTION Multiply(p_a, p_b)
DEFINE p_a INTEGER
DEFINE p_b INTEGER
DEFINE soapStatus INTEGER
LET Multiply.a = p_a
LET Multiply.b = p_b
LET soapStatus = Multiply_g()
RETURN soapStatus, MultiplyResponse.r
END FUNCTION
#
# FUNCTION: Multiply_g
# RETURNING: soapStatus
# INPUT: GLOBAL Multiply
# OUTPUT: GLOBAL MultiplyResponse
#
FUNCTION Multiply_g()
DEFINE wsstatus INTEGER
DEFINE retryAuth INTEGER
DEFINE retryProxy INTEGER
DEFINE retry INTEGER
DEFINE fault BOOLEAN
DEFINE nb INTEGER
DEFINE uri STRING
DEFINE setcookie STRING
DEFINE mustUnderstand INTEGER
DEFINE request com.HTTPRequest
DEFINE response com.HTTPResponse
DEFINE writer xml.StaxWriter
DEFINE reader xml.StaxReader
#
# INIT VARIABLES
#
LET wsstatus = -1
LET retryAuth = FALSE
LET retryProxy = FALSE
LET retry = TRUE
LET fault = FALSE
LET uri = com.WebServiceEngine.GetOption("SoapModuleURI")
IF Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri IS NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri = "http://localhost:8090"
END IF
#
# CREATE REQUEST
#
TRY
LET request = com.HTTPRequest.Create(Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
CALL request.setMethod("POST")
CALL request.setCharset("UTF-8")
CALL request.setHeader("Content-Type","application/soap+xml; action=\"\"")
CALL WSHelper_SetRequestHeaders(request, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Request.Headers)
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version IS NOT NULL THEN
CALL request.setVersion(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie IS NOT NULL THEN
CALL request.setHeader("Cookie",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout <> 0 THEN
CALL request.setConnectionTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout <> 0 THEN
CALL request.setTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest IS NOT NULL THEN
CALL request.setHeader("Content-Encoding",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest)
END IF
CALL request.setHeader("Accept-Encoding","gzip, deflate")
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender","Cannot create HTTPRequest")
RETURN wsstatus
END TRY
# START LOOP
WHILE retry
LET retry = FALSE
#
# Stax request
#
TRY
LET writer = request.beginXmlRequest()
CALL WSHelper_WriteStaxSOAP12StartEnvelope(writer)
CALL WSHelper_WriteStaxSOAP12StartBody(writer)
#
# STAX SOAP REQUEST SERIALIZE
#
CALL xml.Serializer.VariableToStax(Multiply,writer)
CALL WSHelper_WriteStaxSOAP12EndBody(writer)
CALL WSHelper_WriteStaxSOAP12EndEnvelope(writer)
CALL request.endXmlRequest(writer)
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender",SQLCA.SQLERRM)
RETURN wsstatus
END TRY
#
# PROCESS RESPONSE
#
TRY
LET response = request.getResponse()
#
# RETRIEVE SERVICE SESSION COOKIE
#
LET setcookie = response.getHeader("Set-Cookie")
IF setcookie IS NOT NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie = WSHelper_ExtractServerCookie(setcookie,Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
END IF
#
# RETRIEVE HTTP RESPONSE Headers
#
CALL WSHelper_SetResponseHeaders(response, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Response.Headers)
CASE
WHEN response.getStatusCode()==200 OR response.getStatusCode()==500
#
# Check SOAP 1.2 MimeType
#
IF NOT WSHelper_CheckSOAP12HttpMimeType(response) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE OR FAULT
#
LET reader = response.beginXmlResponse() # Begin Streaming Response
IF NOT WSHelper_ReadStaxSOAP12StartEnvelope(reader) THEN
EXIT CASE
END IF
# Process SOAP headers
LET nb = 0
IF WSHelper_CheckStaxSOAP12Header(reader) AND NOT reader.isEmptyElement() THEN
CALL reader.nextTag()
WHILE (reader.getEventType()=="START_ELEMENT")
IF WSHelper_CheckStaxSOAP12HeaderRole(reader,uri) THEN
LET mustUnderstand = WSHelper_GetStaxSOAP12HeaderMustUnderstand(reader)
IF mustUnderstand = -1 THEN
CALL WSHelper_FillSOAP12WSError("Sender","Invalid mustUnderstand value")
EXIT CASE
END IF
#
# STAX SOAP RESPONSE HEADER DESERIALIZE
#
IF mustUnderstand THEN
CALL WSHelper_FillSOAP12WSError("MustUnderstand","Mandatory header block not understood")
EXIT CASE
ELSE
CALL reader.nextSibling() # Skip header, not necessary
END IF
ELSE
CALL reader.nextSibling() # Skip header, not intended to us
END IF
END WHILE
IF NOT WSHelper_CheckStaxSOAP12Header(reader) THEN
CALL WSHelper_FillSOAP12WSError("Sender","No ending header tag found")
EXIT CASE
ELSE
CALL reader.nextTag()
END IF
ELSE
IF reader.isEmptyElement() THEN
CALL reader.nextTag()
END IF
END IF
IF NOT WSHelper_ReadStaxSOAP12StartBody(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12StartFault(reader) THEN # Handle SOAP Fault
LET fault = TRUE
CALL reader.nextTag()
IF NOT WSHelper_ReadStaxSOAP12FaultUntilDetail(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12FaultDetail(reader) THEN
#
# STAX SOAP FAULT DESERIALIZE
#
CALL reader.nextSibling() # Skip SOAP detail
END IF
IF NOT WSHelper_ReadStaxSOAP12EndFault(reader) THEN
EXIT CASE
END IF
ELSE # Handle SOAP Response
IF nb != 0 THEN # Check mandatory headers
CALL WSHelper_FillSOAP12WSError("Sender","Headers are missing")
EXIT CASE
END IF
IF NOT WSHelper_RetrieveStaxSOAP12Message(reader) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE DESERIALIZE
#
CALL xml.Serializer.StaxToVariable(reader,MultiplyResponse)
END IF
IF NOT WSHelper_ReadStaxSOAP12EndBody(reader) THEN
EXIT CASE
END IF
IF NOT WSHelper_ReadStaxSOAP12EndEnvelope(reader) THEN
EXIT CASE
END IF
# End Streaming Response
CALL response.endXmlResponse(reader)
IF NOT fault THEN
LET wsstatus = 0
END IF
WHEN response.getStatusCode()==401 # HTTP Authentication
IF retryAuth THEN
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error 401 ("||response.getStatusDescription()||")")
ELSE
LET retryAuth = TRUE
LET retry = TRUE
END IF
WHEN response.getStatusCode()==407 # Proxy Authentication
IF retryProxy THEN
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error 407 ("||response.getStatusDescription()||")")
ELSE
LET retryProxy = TRUE
LET retry = TRUE
END IF
OTHERWISE
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error "||response.getStatusCode()||" ("||response.getStatusDescription()||")")
END CASE
CATCH
LET wsstatus = status
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
RETURN wsstatus
END TRY
# END LOOP
END WHILE
RETURN wsstatus
END FUNCTION
FUNCTION MultiplyRequest_g()
DEFINE wsstatus INTEGER
DEFINE writer xml.StaxWriter
#
# CHECK PREVIOUS CALL
#
IF MultiplyHTTPReq IS NOT NULL AND MultiplyHTTPResp IS NULL THEN
# Request was sent but there was no response yet
CALL WSHelper_FillSOAP12WSError("Sender","Cannot issue a new request until previous response was received")
RETURN -2 # waiting for the response
ELSE
IF Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri IS NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri = "http://localhost:8090"
END IF
END IF
#
# CREATE REQUEST
#
TRY
LET MultiplyHTTPReq = com.HTTPRequest.Create(Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
CALL MultiplyHTTPReq.setMethod("POST")
CALL MultiplyHTTPReq.setCharset("UTF-8")
CALL MultiplyHTTPReq.setHeader("Content-Type","application/soap+xml; action=\"\"")
CALL WSHelper_SetRequestHeaders(MultiplyHTTPReq, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Request.Headers)
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version IS NOT NULL THEN
CALL MultiplyHTTPReq.setVersion(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie IS NOT NULL THEN
CALL MultiplyHTTPReq.setHeader("Cookie",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout <> 0 THEN
CALL MultiplyHTTPReq.setConnectionTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout <> 0 THEN
CALL MultiplyHTTPReq.setTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest IS NOT NULL THEN
CALL MultiplyHTTPReq.setHeader("Content-Encoding",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest)
END IF
CALL MultiplyHTTPReq.setHeader("Accept-Encoding","gzip, deflate")
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender","Cannot create HTTPRequest")
LET MultiplyHTTPReq = NULL
RETURN wsstatus
END TRY
#
# Stax request
#
TRY
LET writer = MultiplyHTTPReq.beginXmlRequest()
CALL WSHelper_WriteStaxSOAP12StartEnvelope(writer)
CALL WSHelper_WriteStaxSOAP12StartBody(writer)
#
# STAX SOAP REQUEST SERIALIZE
#
CALL xml.Serializer.VariableToStax(Multiply,writer)
CALL WSHelper_WriteStaxSOAP12EndBody(writer)
CALL WSHelper_WriteStaxSOAP12EndEnvelope(writer)
CALL MultiplyHTTPReq.endXmlRequest(writer)
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender",SQLCA.SQLERRM)
LET MultiplyHTTPReq = NULL
RETURN wsstatus
END TRY
#
# PROCESS RESPONSE
#
TRY
LET MultiplyHTTPResp = MultiplyHTTPReq.getAsyncResponse()
RETURN 0 # SUCCESS
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
LET MultiplyHTTPReq = NULL
RETURN wsstatus
END TRY
END FUNCTION
FUNCTION MultiplyResponse_g()
DEFINE wsstatus INTEGER
DEFINE fault BOOLEAN
DEFINE nb INTEGER
DEFINE uri STRING
DEFINE setcookie STRING
DEFINE mustUnderstand INTEGER
DEFINE reader xml.StaxReader
LET fault = FALSE
LET wsstatus = -1
LET uri = com.WebServiceEngine.GetOption("SoapModuleURI")
#
# CHECK PREVIOUS CALL
#
IF MultiplyHTTPReq IS NULL THEN
# No request was sent
CALL WSHelper_FillSOAP12WSError("Sender","No request has been sent")
RETURN -1
END IF
TRY
#
# PROCESS RESPONSE
#
IF MultiplyHTTPResp IS NULL THEN
# Still no response, try again
LET MultiplyHTTPResp = MultiplyHTTPReq.getAsyncResponse()
END IF
IF MultiplyHTTPResp IS NULL THEN
# We got no response, still waiting for
CALL WSHelper_FillSOAP12WSError("Sender","Response was not yet received")
RETURN -2
END IF
#
# RETRIEVE SERVICE SESSION COOKIE
#
LET setcookie = MultiplyHTTPResp.getHeader("Set-Cookie")
IF setcookie IS NOT NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie = WSHelper_ExtractServerCookie(setcookie,Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
END IF
#
# RETRIEVE HTTP RESPONSE Headers
#
CALL WSHelper_SetResponseHeaders(MultiplyHTTPResp, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Response.Headers)
CASE
WHEN MultiplyHTTPResp.getStatusCode()==200 OR MultiplyHTTPResp.getStatusCode()==500
#
# Check SOAP 1.2 MimeType
#
IF NOT WSHelper_CheckSOAP12HttpMimeType(MultiplyHTTPResp) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE OR FAULT
#
LET reader = MultiplyHTTPResp.beginXmlResponse() # Begin Streaming Response
IF NOT WSHelper_ReadStaxSOAP12StartEnvelope(reader) THEN
EXIT CASE
END IF
# Process SOAP headers
LET nb = 0
IF WSHelper_CheckStaxSOAP12Header(reader) AND NOT reader.isEmptyElement() THEN
CALL reader.nextTag()
WHILE (reader.getEventType()=="START_ELEMENT")
IF WSHelper_CheckStaxSOAP12HeaderRole(reader,uri) THEN
LET mustUnderstand = WSHelper_GetStaxSOAP12HeaderMustUnderstand(reader)
IF mustUnderstand = -1 THEN
CALL WSHelper_FillSOAP12WSError("Sender","Invalid mustUnderstand value")
EXIT CASE
END IF
#
# STAX SOAP RESPONSE HEADER DESERIALIZE
#
IF mustUnderstand THEN
CALL WSHelper_FillSOAP12WSError("MustUnderstand","Mandatory header block not understood")
EXIT CASE
ELSE
CALL reader.nextSibling() # Skip header, not necessary
END IF
ELSE
CALL reader.nextSibling() # Skip header, not intended to us
END IF
END WHILE
IF NOT WSHelper_CheckStaxSOAP12Header(reader) THEN
CALL WSHelper_FillSOAP12WSError("Sender","No ending header tag found")
EXIT CASE
ELSE
CALL reader.nextTag()
END IF
ELSE
IF reader.isEmptyElement() THEN
CALL reader.nextTag()
END IF
END IF
IF NOT WSHelper_ReadStaxSOAP12StartBody(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12StartFault(reader) THEN # Handle SOAP Fault
LET fault = TRUE
CALL reader.nextTag()
IF NOT WSHelper_ReadStaxSOAP12FaultUntilDetail(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12FaultDetail(reader) THEN
#
# STAX SOAP FAULT DESERIALIZE
#
CALL reader.nextSibling() # Skip SOAP detail
END IF
IF NOT WSHelper_ReadStaxSOAP12EndFault(reader) THEN
EXIT CASE
END IF
ELSE # Handle SOAP Response
IF nb != 0 THEN # Check mandatory headers
CALL WSHelper_FillSOAP12WSError("Sender","Headers are missing")
EXIT CASE
END IF
IF NOT WSHelper_RetrieveStaxSOAP12Message(reader) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE DESERIALIZE
#
CALL xml.Serializer.StaxToVariable(reader,MultiplyResponse)
END IF
IF NOT WSHelper_ReadStaxSOAP12EndBody(reader) THEN
EXIT CASE
END IF
IF NOT WSHelper_ReadStaxSOAP12EndEnvelope(reader) THEN
EXIT CASE
END IF
# End Streaming Response
CALL MultiplyHTTPResp.endXmlResponse(reader)
IF NOT fault THEN
LET wsstatus = 0
END IF
OTHERWISE
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error "||MultiplyHTTPResp.getStatusCode()||" ("||MultiplyHTTPResp.getStatusDescription()||")")
END CASE
CATCH
LET wsstatus = status
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
END TRY
#
# RESET VARIABLES
#
LET MultiplyHTTPReq = NULL
LET MultiplyHTTPResp = NULL
RETURN wsstatus
END FUNCTION
#
# Operation: Divide
# FAULT #1: GLOBALS DividedByZero
#
#
# FUNCTION: Divide
#
FUNCTION Divide(p_a, p_b)
DEFINE p_a INTEGER
DEFINE p_b INTEGER
DEFINE soapStatus INTEGER
LET Divide.a = p_a
LET Divide.b = p_b
LET soapStatus = Divide_g()
RETURN soapStatus, DivideResponse.quotient, DivideResponse.remainder
END FUNCTION
#
# FUNCTION: Divide_g
# RETURNING: soapStatus
# INPUT: GLOBAL Divide
# OUTPUT: GLOBAL DivideResponse
#
FUNCTION Divide_g()
DEFINE wsstatus INTEGER
DEFINE retryAuth INTEGER
DEFINE retryProxy INTEGER
DEFINE retry INTEGER
DEFINE fault BOOLEAN
DEFINE nb INTEGER
DEFINE uri STRING
DEFINE setcookie STRING
DEFINE mustUnderstand INTEGER
DEFINE request com.HTTPRequest
DEFINE response com.HTTPResponse
DEFINE writer xml.StaxWriter
DEFINE reader xml.StaxReader
#
# INIT VARIABLES
#
LET wsstatus = -1
LET retryAuth = FALSE
LET retryProxy = FALSE
LET retry = TRUE
LET fault = FALSE
LET uri = com.WebServiceEngine.GetOption("SoapModuleURI")
IF Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri IS NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri = "http://localhost:8090"
END IF
#
# CREATE REQUEST
#
TRY
LET request = com.HTTPRequest.Create(Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
CALL request.setMethod("POST")
CALL request.setCharset("UTF-8")
CALL request.setHeader("Content-Type","application/soap+xml; action=\"\"")
CALL WSHelper_SetRequestHeaders(request, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Request.Headers)
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version IS NOT NULL THEN
CALL request.setVersion(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie IS NOT NULL THEN
CALL request.setHeader("Cookie",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout <> 0 THEN
CALL request.setConnectionTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout <> 0 THEN
CALL request.setTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest IS NOT NULL THEN
CALL request.setHeader("Content-Encoding",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest)
END IF
CALL request.setHeader("Accept-Encoding","gzip, deflate")
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender","Cannot create HTTPRequest")
RETURN wsstatus
END TRY
# START LOOP
WHILE retry
LET retry = FALSE
#
# Stax request
#
TRY
LET writer = request.beginXmlRequest()
CALL WSHelper_WriteStaxSOAP12StartEnvelope(writer)
CALL WSHelper_WriteStaxSOAP12StartBody(writer)
#
# STAX SOAP REQUEST SERIALIZE
#
CALL xml.Serializer.VariableToStax(Divide,writer)
CALL WSHelper_WriteStaxSOAP12EndBody(writer)
CALL WSHelper_WriteStaxSOAP12EndEnvelope(writer)
CALL request.endXmlRequest(writer)
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender",SQLCA.SQLERRM)
RETURN wsstatus
END TRY
#
# PROCESS RESPONSE
#
TRY
LET response = request.getResponse()
#
# RETRIEVE SERVICE SESSION COOKIE
#
LET setcookie = response.getHeader("Set-Cookie")
IF setcookie IS NOT NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie = WSHelper_ExtractServerCookie(setcookie,Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
END IF
#
# RETRIEVE HTTP RESPONSE Headers
#
CALL WSHelper_SetResponseHeaders(response, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Response.Headers)
CASE
WHEN response.getStatusCode()==200 OR response.getStatusCode()==500
#
# Check SOAP 1.2 MimeType
#
IF NOT WSHelper_CheckSOAP12HttpMimeType(response) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE OR FAULT
#
LET reader = response.beginXmlResponse() # Begin Streaming Response
IF NOT WSHelper_ReadStaxSOAP12StartEnvelope(reader) THEN
EXIT CASE
END IF
# Process SOAP headers
LET nb = 0
IF WSHelper_CheckStaxSOAP12Header(reader) AND NOT reader.isEmptyElement() THEN
CALL reader.nextTag()
WHILE (reader.getEventType()=="START_ELEMENT")
IF WSHelper_CheckStaxSOAP12HeaderRole(reader,uri) THEN
LET mustUnderstand = WSHelper_GetStaxSOAP12HeaderMustUnderstand(reader)
IF mustUnderstand = -1 THEN
CALL WSHelper_FillSOAP12WSError("Sender","Invalid mustUnderstand value")
EXIT CASE
END IF
#
# STAX SOAP RESPONSE HEADER DESERIALIZE
#
IF mustUnderstand THEN
CALL WSHelper_FillSOAP12WSError("MustUnderstand","Mandatory header block not understood")
EXIT CASE
ELSE
CALL reader.nextSibling() # Skip header, not necessary
END IF
ELSE
CALL reader.nextSibling() # Skip header, not intended to us
END IF
END WHILE
IF NOT WSHelper_CheckStaxSOAP12Header(reader) THEN
CALL WSHelper_FillSOAP12WSError("Sender","No ending header tag found")
EXIT CASE
ELSE
CALL reader.nextTag()
END IF
ELSE
IF reader.isEmptyElement() THEN
CALL reader.nextTag()
END IF
END IF
IF NOT WSHelper_ReadStaxSOAP12StartBody(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12StartFault(reader) THEN # Handle SOAP Fault
LET fault = TRUE
CALL reader.nextTag()
IF NOT WSHelper_ReadStaxSOAP12FaultUntilDetail(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12FaultDetail(reader) THEN
#
# STAX SOAP FAULT DESERIALIZE
#
IF NOT reader.isEmptyElement() THEN
CALL reader.nextTag()
IF reader.getLocalName()=="DividedByZero" AND reader.getNamespace()=="http://tempuri.org/" THEN
CALL xml.Serializer.StaxToVariable(reader,DividedByZero)
LET wsstatus = FaultID_DividedByZero
END IF
IF wsstatus == -1 THEN
CALL reader.nextTag() # Skip unknown SOAP Fault detail
END IF
END IF
CALL reader.nextTag() # Read detail close tag
END IF
IF NOT WSHelper_ReadStaxSOAP12EndFault(reader) THEN
EXIT CASE
END IF
ELSE # Handle SOAP Response
IF nb != 0 THEN # Check mandatory headers
CALL WSHelper_FillSOAP12WSError("Sender","Headers are missing")
EXIT CASE
END IF
IF NOT WSHelper_RetrieveStaxSOAP12Message(reader) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE DESERIALIZE
#
CALL xml.Serializer.StaxToVariable(reader,DivideResponse)
END IF
IF NOT WSHelper_ReadStaxSOAP12EndBody(reader) THEN
EXIT CASE
END IF
IF NOT WSHelper_ReadStaxSOAP12EndEnvelope(reader) THEN
EXIT CASE
END IF
# End Streaming Response
CALL response.endXmlResponse(reader)
IF NOT fault THEN
LET wsstatus = 0
END IF
WHEN response.getStatusCode()==401 # HTTP Authentication
IF retryAuth THEN
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error 401 ("||response.getStatusDescription()||")")
ELSE
LET retryAuth = TRUE
LET retry = TRUE
END IF
WHEN response.getStatusCode()==407 # Proxy Authentication
IF retryProxy THEN
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error 407 ("||response.getStatusDescription()||")")
ELSE
LET retryProxy = TRUE
LET retry = TRUE
END IF
OTHERWISE
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error "||response.getStatusCode()||" ("||response.getStatusDescription()||")")
END CASE
CATCH
LET wsstatus = status
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
RETURN wsstatus
END TRY
# END LOOP
END WHILE
RETURN wsstatus
END FUNCTION
FUNCTION DivideRequest_g()
DEFINE wsstatus INTEGER
DEFINE writer xml.StaxWriter
#
# CHECK PREVIOUS CALL
#
IF DivideHTTPReq IS NOT NULL AND DivideHTTPResp IS NULL THEN
# Request was sent but there was no response yet
CALL WSHelper_FillSOAP12WSError("Sender","Cannot issue a new request until previous response was received")
RETURN -2 # waiting for the response
ELSE
IF Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri IS NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri = "http://localhost:8090"
END IF
END IF
#
# CREATE REQUEST
#
TRY
LET DivideHTTPReq = com.HTTPRequest.Create(Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
CALL DivideHTTPReq.setMethod("POST")
CALL DivideHTTPReq.setCharset("UTF-8")
CALL DivideHTTPReq.setHeader("Content-Type","application/soap+xml; action=\"\"")
CALL WSHelper_SetRequestHeaders(DivideHTTPReq, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Request.Headers)
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version IS NOT NULL THEN
CALL DivideHTTPReq.setVersion(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Version)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie IS NOT NULL THEN
CALL DivideHTTPReq.setHeader("Cookie",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout <> 0 THEN
CALL DivideHTTPReq.setConnectionTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ConnectionTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout <> 0 THEN
CALL DivideHTTPReq.setTimeout(Calculator_CalculatorPortTypeSoap12Endpoint.Binding.ReadWriteTimeout)
END IF
IF Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest IS NOT NULL THEN
CALL DivideHTTPReq.setHeader("Content-Encoding",Calculator_CalculatorPortTypeSoap12Endpoint.Binding.CompressRequest)
END IF
CALL DivideHTTPReq.setHeader("Accept-Encoding","gzip, deflate")
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender","Cannot create HTTPRequest")
LET DivideHTTPReq = NULL
RETURN wsstatus
END TRY
#
# Stax request
#
TRY
LET writer = DivideHTTPReq.beginXmlRequest()
CALL WSHelper_WriteStaxSOAP12StartEnvelope(writer)
CALL WSHelper_WriteStaxSOAP12StartBody(writer)
#
# STAX SOAP REQUEST SERIALIZE
#
CALL xml.Serializer.VariableToStax(Divide,writer)
CALL WSHelper_WriteStaxSOAP12EndBody(writer)
CALL WSHelper_WriteStaxSOAP12EndEnvelope(writer)
CALL DivideHTTPReq.endXmlRequest(writer)
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Sender",SQLCA.SQLERRM)
LET DivideHTTPReq = NULL
RETURN wsstatus
END TRY
#
# PROCESS RESPONSE
#
TRY
LET DivideHTTPResp = DivideHTTPReq.getAsyncResponse()
RETURN 0 # SUCCESS
CATCH
LET wsstatus = STATUS
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
LET DivideHTTPReq = NULL
RETURN wsstatus
END TRY
END FUNCTION
FUNCTION DivideResponse_g()
DEFINE wsstatus INTEGER
DEFINE fault BOOLEAN
DEFINE nb INTEGER
DEFINE uri STRING
DEFINE setcookie STRING
DEFINE mustUnderstand INTEGER
DEFINE reader xml.StaxReader
LET fault = FALSE
LET wsstatus = -1
LET uri = com.WebServiceEngine.GetOption("SoapModuleURI")
#
# CHECK PREVIOUS CALL
#
IF DivideHTTPReq IS NULL THEN
# No request was sent
CALL WSHelper_FillSOAP12WSError("Sender","No request has been sent")
RETURN -1
END IF
TRY
#
# PROCESS RESPONSE
#
IF DivideHTTPResp IS NULL THEN
# Still no response, try again
LET DivideHTTPResp = DivideHTTPReq.getAsyncResponse()
END IF
IF DivideHTTPResp IS NULL THEN
# We got no response, still waiting for
CALL WSHelper_FillSOAP12WSError("Sender","Response was not yet received")
RETURN -2
END IF
#
# RETRIEVE SERVICE SESSION COOKIE
#
LET setcookie = DivideHTTPResp.getHeader("Set-Cookie")
IF setcookie IS NOT NULL THEN
LET Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Cookie = WSHelper_ExtractServerCookie(setcookie,Calculator_CalculatorPortTypeSoap12Endpoint.Address.Uri)
END IF
#
# RETRIEVE HTTP RESPONSE Headers
#
CALL WSHelper_SetResponseHeaders(DivideHTTPResp, Calculator_CalculatorPortTypeSoap12Endpoint.Binding.Response.Headers)
CASE
WHEN DivideHTTPResp.getStatusCode()==200 OR DivideHTTPResp.getStatusCode()==500
#
# Check SOAP 1.2 MimeType
#
IF NOT WSHelper_CheckSOAP12HttpMimeType(DivideHTTPResp) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE OR FAULT
#
LET reader = DivideHTTPResp.beginXmlResponse() # Begin Streaming Response
IF NOT WSHelper_ReadStaxSOAP12StartEnvelope(reader) THEN
EXIT CASE
END IF
# Process SOAP headers
LET nb = 0
IF WSHelper_CheckStaxSOAP12Header(reader) AND NOT reader.isEmptyElement() THEN
CALL reader.nextTag()
WHILE (reader.getEventType()=="START_ELEMENT")
IF WSHelper_CheckStaxSOAP12HeaderRole(reader,uri) THEN
LET mustUnderstand = WSHelper_GetStaxSOAP12HeaderMustUnderstand(reader)
IF mustUnderstand = -1 THEN
CALL WSHelper_FillSOAP12WSError("Sender","Invalid mustUnderstand value")
EXIT CASE
END IF
#
# STAX SOAP RESPONSE HEADER DESERIALIZE
#
IF mustUnderstand THEN
CALL WSHelper_FillSOAP12WSError("MustUnderstand","Mandatory header block not understood")
EXIT CASE
ELSE
CALL reader.nextSibling() # Skip header, not necessary
END IF
ELSE
CALL reader.nextSibling() # Skip header, not intended to us
END IF
END WHILE
IF NOT WSHelper_CheckStaxSOAP12Header(reader) THEN
CALL WSHelper_FillSOAP12WSError("Sender","No ending header tag found")
EXIT CASE
ELSE
CALL reader.nextTag()
END IF
ELSE
IF reader.isEmptyElement() THEN
CALL reader.nextTag()
END IF
END IF
IF NOT WSHelper_ReadStaxSOAP12StartBody(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12StartFault(reader) THEN # Handle SOAP Fault
LET fault = TRUE
CALL reader.nextTag()
IF NOT WSHelper_ReadStaxSOAP12FaultUntilDetail(reader) THEN
EXIT CASE
END IF
IF WSHelper_CheckStaxSOAP12FaultDetail(reader) THEN
#
# STAX SOAP FAULT DESERIALIZE
#
IF NOT reader.isEmptyElement() THEN
CALL reader.nextTag()
IF reader.getLocalName()=="DividedByZero" AND reader.getNamespace()=="http://tempuri.org/" THEN
CALL xml.Serializer.StaxToVariable(reader,DividedByZero)
LET wsstatus = FaultID_DividedByZero
END IF
IF wsstatus == -1 THEN
CALL reader.nextTag() # Skip unknown SOAP Fault detail
END IF
END IF
CALL reader.nextTag() # Read detail close tag
END IF
IF NOT WSHelper_ReadStaxSOAP12EndFault(reader) THEN
EXIT CASE
END IF
ELSE # Handle SOAP Response
IF nb != 0 THEN # Check mandatory headers
CALL WSHelper_FillSOAP12WSError("Sender","Headers are missing")
EXIT CASE
END IF
IF NOT WSHelper_RetrieveStaxSOAP12Message(reader) THEN
EXIT CASE
END IF
#
# STAX SOAP RESPONSE DESERIALIZE
#
CALL xml.Serializer.StaxToVariable(reader,DivideResponse)
END IF
IF NOT WSHelper_ReadStaxSOAP12EndBody(reader) THEN
EXIT CASE
END IF
IF NOT WSHelper_ReadStaxSOAP12EndEnvelope(reader) THEN
EXIT CASE
END IF
# End Streaming Response
CALL DivideHTTPResp.endXmlResponse(reader)
IF NOT fault THEN
LET wsstatus = 0
END IF
OTHERWISE
CALL WSHelper_FillSOAP12WSError("Receiver","HTTP Error "||DivideHTTPResp.getStatusCode()||" ("||DivideHTTPResp.getStatusDescription()||")")
END CASE
CATCH
LET wsstatus = status
CALL WSHelper_FillSOAP12WSError("Receiver",SQLCA.SQLERRM)
END TRY
#
# RESET VARIABLES
#
LET DivideHTTPReq = NULL
LET DivideHTTPResp = NULL
RETURN wsstatus
END FUNCTION