Examples: Using the com.HTTPPart
class
Examples using methods of the com.HTTPPart
class.
This example consists of two applications: a client and server exchanging an XML document in multipart with an image as an attachment.
Client Application
IMPORT com
IMPORT xml
CONSTANT SERVER_URL = "http://localhost:8090/MultipartMixed/Sample"
MAIN
DEFINE req com.HTTPRequest
DEFINE resp com.HTTPResponse
DEFINE doc xml.DomDocument
DEFINE p com.HTTPPart
DEFINE type STRING
DEFINE ind INTEGER
LET req = com.HTTPRequest.Create(SERVER_URL)
CALL req.setMethod("POST")
CALL req.setHeader("MyClientHeader","Hello")
TRY
# Set multipart type
CALL req.setMultipartType("mixed",NULL,NULL)
# Add filename as part
LET p = com.HTTPPart.CreateAttachment("my_picture.png")
# Set attachment Content-Type
CALL p.setHeader("Content-Type","image/png")
# Add part to the request
CALL req.addPart(p)
# Perform XML request
LET doc = xml.DomDocument.CreateDocument("MyXmlDocument")
CALL req.doXmlRequest(doc)
# Check response
LET resp=req.getResponse()
IF resp.getStatusCode() != 200 THEN
DISPLAY "HTTP Error ("||resp.getStatusCode()||") ",
resp.getStatusDescription()
EXIT PROGRAM (-1)
END IF
IF resp.getStatusDescription() != "OK" THEN
DISPLAY "HTTP Error ("||resp.getStatusCode()||") ",
resp.getStatusDescription()
EXIT PROGRAM (-1)
END IF
# Check whether multipart response or not
LET type = resp.getMultipartType()
IF type IS NULL THEN
DISPLAY "Failed : Expected multipart in response"
EXIT PROGRAM (-1)
ELSE
DISPLAY "Response is multipart of :",type
END IF
# Check response
LET doc = resp.getXmlResponse()
IF doc IS NULL THEN
DISPLAY "Expected XML document as response"
EXIT PROGRAM (-1)
ELSE
DISPLAY "Response is : ",doc.saveToString()
END IF
# Process additional parts
FOR ind = 1 TO resp.getPartCount()
LET p = resp.getPart(ind)
IF p.getAttachment() IS NOT NULL THEN
DISPLAY "Attached file at :",p.getAttachment()
ELSE
DISPLAY "Attached part is :",p.getContentAsString()
END IF
END FOR
CATCH
DISPLAY "unexpected exception :",STATUS," ("||SQLCA.SQLERRM||")"
EXIT PROGRAM (-1)
END TRY
END MAIN
Server Application
IMPORT com
IMPORT xml
MAIN
DEFINE req com.HTTPServiceRequest
DEFINE url STRING
DEFINE method STRING
DEFINE doc xml.DomDocument
DEFINE type STRING
DEFINE ind INTEGER
DEFINE p com.HTTPPart
CALL com.WebServiceEngine.Start()
LET req = com.WebServiceEngine.getHTTPServiceRequest(-1)
LET url = req.getURL()
IF url IS NULL THEN
DISPLAY "Failed: url should not be null"
EXIT PROGRAM (-1)
END IF
LET method = req.getMethod()
IF method IS NULL OR method != "POST" THEN
DISPLAY "Failed: method should be POST"
EXIT PROGRAM (-1)
END IF
# Check multipart type
LET type = req.getRequestMultipartType()
IF type IS NULL THEN
DISPLAY "Failed: expected multipart in request"
EXIT PROGRAM (-1)
END IF
TRY
LET doc = req.readXMLRequest()
DISPLAY "Request is :", doc.saveToString()
CATCH
DISPLAY "Failed: unexpected error :", STATUS
EXIT PROGRAM (-1)
END TRY
# Process additional parts
FOR ind = 1 TO req.getRequestPartCount()
LET p = req.getRequestPart(ind)
IF p.getAttachment() IS NOT NULL THEN
DISPLAY "Attached file at :",p.getAttachment()
ELSE
DISPLAY "Attached part is :",p.getContentAsString()
END IF
END FOR
# Set multipart response type
CALL req.setResponseMultipartType("mixed",NULL,NULL)
# Add XML Part
LET p = com.HTTPPart.CreateAttachment("my_other_picture.jpg")
CALL p.setHeader("Content-Type","image/jpg")
CALL req.addResponsePart(p)
LET doc = xml.DomDocument.CreateDocument("MyResponse")
CALL req.sendXmlResponse(200,NULL,doc)
END MAIN