Forums
I have gone though just about every function in tutorial 14, 15, 23 & 24. But I am unable to figure out how to output the raw XML data stored in an ILOB. I am processing a soap response and I would like to be able to ResponseWrite the entire soap enevelope, not just a single xpath value.
The most logical function that I thought would do it was ResponseWriteILOB; however, it outputs some kind of encoded string.
Does anyone know the solution to this? Please let me know.
My Code is below:
<%@ language="RPGLE" %> <% d*' Include the ILOB and xml parser prototypes /include qasphdr,ilob /include qasphdr,xmlparser d file s 1014 varying d CRLF c x'0D25' d q c '''' d path s 256 varying d url s 1014 varying d Error s N d reqILOB s * d respILOB s * d xmlPtr s * d i s 10i 0 /free SetContentType('text/html; charset=windows-1252'); file = './wsauth/auth.html'; ResponseWriteTag(file : '*FIRST'); if (form('username') > '' AND form('password') > ''); exsr RunWebService; endif; ResponseWriteTag(file : 'html-footer'); return; Begsr RunWebService; //' create and reset my work ILOB's for my Web-Service reqILOB = SesGetILOB ('request'); // get a pointer to a session ILOB used as my request respILOB = SesGetILOB ('response'); // get a pointer to a session ILOB used for the response from the server ILOB_Clear(reqILOB); ILOB_Clear(respILOB); //' Build the SOAP request Exsr BuildReq; //' Build the URL string Url = 'http://192.168.1.226/response.xml'; //' My request is now ready to go to the server, so i call the httpRequest for ILOB's Error = ILOB_httpRequest( Url : // The URL in form:"http:/ /server:port/resource" 30: // Number of seconds befor e timing out 'POST': // The "POST" or "GET" met hod reqILOB: // pointer to my Request I LOB RespILOB // pointer to my Response ILOB ); //' Check for errors if error; ResponseWrite(GetlastError('*MSGTXT')); leaveSr; endif; //' My data has arrived - I'll fire up the XML parser xmlPtr = XML_ParseILOB ( //' Returns XML- object tree from an ILOB RespILOB: //' Pointer to an ILOB object 'syntax=loose': //' Parsing options 1208: //' The ccsid of the input ilob (0 =current job) 0 //' The ccsid of the XML tree (0=cu rrent job) ); //' Check for errors if XML_Error(xmlPtr); ResponseWrite(XML_Message(xmlPtr)); XML_Close(xmlPtr); leaveSr; endif; //' Use X-path to get data from the XML tree //' The number of elements is given by the [UBOUND] now we just index through it path = '/soap:Envelope/soap:Body/m0:AuthenticateResponse' + '/m0:AuthenticateResult'; ResponseWrite('<hr/><b>Login Value: </b>'); ResponseWrite(XML_GetValue (xmlPtr:path:'Invalid Soap Packet')); ResponseWrite('<hr/><b>Soap Packet:</b>'); ILOB_SaveToStream(RespILOB:'/www2/debug.txt':'w,ccsid=277'); XML_Close(xmlPtr); EndSr; Begsr BuildReq; //' Now i want to populate a simple XML request. - my ILOB header need a content type XML //' All httpRequest are routet to the same default job hench the cookie ILOB_SetHeaderBuf( reqILOB : 'Content-Type: application/xml; charset=windows- 1252' + CRLF + 'SOAPAction: "http://icebreak.org/"' ); //' I reroute my response object to the request ILOB, so I can u se the ASP sysnax for creating the XML //' Here we build the SOAP envelope and body - this was copied from running the webservice interactive. SetResponseObject(reqILOB); %><?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:xsi=http://www.w3.org/2001/XMLSchema- instance xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:soap="http ://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <m0:Authenticate xmlns:m0=http://<edit>/ldapauthenticati on> <m0:username><%= form('username') %></m0:username> <m0:password><%= form('password') %></m0:password> </m0:Authenticate> </soap:Body> </soap:Envelope><% //' Now i redirect my response back to the default responce obje t ( thats what my browser receives ) SetResponseObject(*NULL); // SetEncodingType('*html'); EndSr; %>
Re: Converting an ILOB to a Raw Text String
another post I missed on moderation!
Re: Converting an ILOB to a
Re: Converting an ILOB to a Raw Text String
Hi Milan;
You are so close - what you are missing is just setting the transfere between the ILOB and the responseobject to binary. it will look like:
Note the XMP tag. If you omit that it it will just be a part of the response but you cant see it