DataFlex
DataFlex
SOAP with MTOM XOP Attachment
See more HTTP Examples
Demonstrates how to send the following sample SOAP request with an MTOM/XOP attachment:
Content-Type: Multipart/Related; start-info="text/xml"; type="application/xop+xml"; boundary="----=_Part_0_1744155.1118953559416"
Content-Length: 3453
SOAPAction: "some-SOAP-action"
------=_Part_1_4558657.1118953559446
Content-Type: application/xop+xml; type="text/xml"; charset=utf-8
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<Detail xmlns="http://example.org/mtom/data">
<image>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:5aeaa450-17f0-4484-b845-a8480c363444@example.org" />
</image>
</Detail>
</soap:Body>
</soap:Envelope>
------=_Part_1_4558657.1118953559446
Content-Type: image/jpeg
Content-ID: <5aeaa450-17f0-4484-b845-a8480c363444@example.org>
... binary data ...
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoHttp
Handle hoSoapXml
String sXmlBody
Variant vReq
Handle hoReq
Boolean iUseTls
Variant vResp
Handle hoResp
Handle hoXmlResponse
String sTemp1
Move False To iSuccess
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Get Create (RefClass(cComChilkatHttp)) To hoHttp
If (Not(IsComObjectCreated(hoHttp))) Begin
Send CreateComObject of hoHttp
End
Get Create (RefClass(cComChilkatXml)) To hoSoapXml
If (Not(IsComObjectCreated(hoSoapXml))) Begin
Send CreateComObject of hoSoapXml
End
Set ComTag Of hoSoapXml To "soap:Envelope"
Get ComAddAttribute Of hoSoapXml "xmlns:soap" "http://schemas.xmlsoap.org/soap/envelope/" To iSuccess
Send ComNewChild2 To hoSoapXml "soap:Body" ""
Get ComGetChild2 Of hoSoapXml 0 To iSuccess
Send ComNewChild2 To hoSoapXml "Detail" ""
Get ComGetChild2 Of hoSoapXml 0 To iSuccess
Get ComAddAttribute Of hoSoapXml "xmlns" "http://example.org/mtom/data" To iSuccess
Send ComNewChild2 To hoSoapXml "image" ""
Get ComGetChild2 Of hoSoapXml 0 To iSuccess
Send ComNewChild2 To hoSoapXml "xop:Include" ""
Get ComGetChild2 Of hoSoapXml 0 To iSuccess
Get ComAddAttribute Of hoSoapXml "xmlns:xop" "http://www.w3.org/2004/08/xop/include" To iSuccess
Get ComAddAttribute Of hoSoapXml "href" "cid:5aeaa450-17f0-4484-b845-a8480c363444@example.org" To iSuccess
Send ComGetRoot2 To hoSoapXml
Set ComEmitXmlDecl Of hoSoapXml To False
Get ComGetXml Of hoSoapXml To sXmlBody
Showln sXmlBody
Get Create (RefClass(cComChilkatHttpRequest)) To hoReq
If (Not(IsComObjectCreated(hoReq))) Begin
Send CreateComObject of hoReq
End
Set ComHttpVerb Of hoReq To "POST"
Set ComPath Of hoReq To "/something/someTarget"
Set ComContentType Of hoReq To 'multipart/related; start-info="text/xml"; type="application/xop+xml"'
Send ComAddHeader To hoReq "SOAPAction" "some-SOAP-action"
Get ComAddStringForUpload2 Of hoReq "" "" sXmlBody "utf-8" 'application/xop+xml; type="text/xml"; charset=utf-8' To iSuccess
// The bytes will be sent as binary (not base64 encoded).
Get ComAddFileForUpload2 Of hoReq "" "qa_data/jpg/starfish.jpg" "image/jpeg" To iSuccess
// The JPEG data is the 2nd sub-part, and therefore is at index 1 (the first sub-part is at index 0)
Get ComAddSubHeader Of hoReq 1 "Content-ID" "<5aeaa450-17f0-4484-b845-a8480c363444@example.org>" To iSuccess
Set ComFollowRedirects Of hoHttp To True
// For debugging, set the SessionLogFilename property
// to see the exact HTTP request and response in a log file.
// (Given that the request contains binary data, you'll need an editor
// that can gracefully view text + binary data. I use EmEditor for most simple editing tasks..)
Set ComSessionLogFilename Of hoHttp To "qa_output/mtom_sessionLog.txt"
Move True To iUseTls
// Note: Please don't run this example without changing the domain to your own domain...
Get Create (RefClass(cComChilkatHttpResponse)) To hoResp
If (Not(IsComObjectCreated(hoResp))) Begin
Send CreateComObject of hoResp
End
Get pvComObject of hoReq to vReq
Get pvComObject of hoResp to vResp
Get ComHttpSReq Of hoHttp "www.example.org" 443 iUseTls vReq vResp To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoHttp To sTemp1
Showln sTemp1
Procedure_Return
End
Get Create (RefClass(cComChilkatXml)) To hoXmlResponse
If (Not(IsComObjectCreated(hoXmlResponse))) Begin
Send CreateComObject of hoXmlResponse
End
Get ComBodyStr Of hoResp To sTemp1
Get ComLoadXml Of hoXmlResponse sTemp1 To iSuccess
Get ComGetXml Of hoXmlResponse To sTemp1
Showln sTemp1
End_Procedure