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