Hello again. I've ran into a bit of a roadblock with my little project. I've read and tried everything can find and I'm feeling a bit stuck. Here is my code - questions at the bottom.: H BNDDIR('HTTPAPI':'QC2LE') *---------------------------------------------------------------------- --* * Program : DSRPERFMON * * Description : First kick at the can downloading Truck Performance data * * : through SHAW's ESS Web Service. * * Programmer : Paul Reid. * * Date : May 21,2013 * *---------------------------------------------------------------------- --* * WSDL : * * [1]https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/ * * OTSWebSvcs.wsdl * *---------------------------------------------------------------------- --* * SoapUI : * * Project Name : ESS Web Services (PMESS) * * Interface Name : OTSWebSvcsSoapBinding * * Operation name : dequeue2 * * Request name : HighVolumeDequeue * *---------------------------------------------------------------------- --* * Revision History * * ---------------- * * Revision # : ini01 Date: mm/dd/yyyy Programmer: name * * Changes made : * * Reason : * *---------------------------------------------------------------------- --* * Prototype call to this program: * *---------------------------------------------------------------------- --* * D DSRPERFMON PR extpgm('DSRPERFMON') D lastTransaction... D 17A * D DSRPERFMON PI D lastTransaction... D 17A * *---------------------------------------------------------------------- --* * /copy Prototypes: * *---------------------------------------------------------------------- --* * * Used to consume a Web Service. /include qrpglesrc,httpapi_h * * Used to decode data encrypted in BASE64. /include qrpglesrc,base64_h * * For I/O with the IFS /include qrpglesrc,ifsio_h * *---------------------------------------------------------------------- --* * Incoming - Procedure to handle data retrieved from the Web Service. * *---------------------------------------------------------------------- --* * D Incoming PR D rate 8F D depth 10I 0 value D name 1024A varying const D path 24576A varying const D value likeds(Xmlstring_t) D attrs * dim(32767) D const options(*varsize) * *---------------------------------------------------------------------- --* * Define local date structures: * *---------------------------------------------------------------------- --* * D XmlString_t... D DS qualified Template D Data... D * D Len... D 10i 0 * *---------------------------------------------------------------------- --* * Define local variables: * *---------------------------------------------------------------------- --* * * Scott's variables. D SOAP S 32767A varying D rc S 10I 0 D rate S 8F D Result S 12P 2 * * Used to assemble the XML SOAP request. D soapHeader... D S 32767A varying D soapBody... D S 32767A varying * * Log. D dequeue2Log... D S 1000A varying * * Input variables for XML Request. D subscriberId... D S 9A varying D transactionIdIn... D S 17A varying * * Variables for Handling errors returned from the Web Service. D sendError... D S 102A inz(*blanks) D peErrorNo... D S 10I 0 inz(*zeros) D errorMessage... D S 100A inz(*blanks) * * Error flag. D didWeGetAnError... D S 3A inz('No ') * * Data returned that is not encoded. D var... D S 50A based(p_var) D count... D S 5P 0 inz(*zeros) D transactionIdOut... D S 17P 0 inz(*zeros) * * Encoded data returned. D resultVar... D S A len(2000000) varying D decodedLen... D S 10I 0 * * Output data D fd1... D S 10I 0 D len1... D S 10I 0 * *---------------------------------------------------------------------- --* * Mainline: * *---------------------------------------------------------------------- --* * /free // Assemble the SOAP Header. exsr assembleSOAPheader; // Assemble the SOAP Body. exsr assembleSOAPbody; // Assemble complete SOAP XML Request. SOAP = %trim(soapHeader) + %trim(soapBody); // Write out to a Log in case we have problems. dequeue2Log = '/home/PAULRE/dequeue2Log.txt'; http_debug(*ON : dequeue2Log); // Change the way the XML parser returns the data. // We need to use pointer since it is so large. http_XmlReturnPtr(*on); // Post Reqest. rc = http_url_post_xml( 'https://www.myshawtracking.ca:443/otsWebWS/services/OTSWebSvcs' : %addr(SOAP) + 2 : %len(SOAP) : *NULL : %paddr(Incoming) : %addr(rate) : HTTP_TIMEOUT : HTTP_USERAGENT : 'text/xml' : 'http://www.qualcomm.com/dequeue2'); // Success! if rc = 1; // Output performance data to the IFS. fd1 = open('/home/PAULRE/perfDataXML.xml' : O_RDWR+O_CREAT+O_TRUNC+O_CCSID : 438 : 1208); if fd1 < 0; // There was an error creating/opening the IFS file. else; callp write(fd1 : %addr(resultVar) : %len(%trim(resultVar))); if len1 < 1; // There was an error writing to the IFS file. else; // Parse out the performance data and // write it into our database. exsr parsePerfData; endif; callp close(fd1); endif; // Send a message if we get an error. else; sendError = *on; endif; // The End. *inlr = *on; //--------------------------------------------------------------------- --* // parsePerfData * //--------------------------------------------------------------------- --* begsr parsePerfData; endsr; //--------------------------------------------------------------------- --* // assembleSOAPheader * //--------------------------------------------------------------------- --* begsr assembleSOAPheader; soapHeader = '<?xml version="1.0" encoding="utf-8"?>' +' <soap:Envelope' +' xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"' +' xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/03/addressing"' +' xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-' +'wss-wssecurity-secext-1.0.xsd"' +' xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-' +'wss-wssecurity-utility-1.0.xsd"' +' xmlns:xsd="http://www.w3.org/2001/XMLSchema"' +' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +'<soap:Header>' +'<wsse:Security soap:mustUnderstand="1" >' +'<wsse:UsernameToken>' +'<wsse:Username>PAULRE@ERBINT</wsse:Username>' +'<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/' +'oasis-200401-wss-username-token-profile-1.0#' +'PasswordText">nor850ton</wsse:Password>' +'</wsse:UsernameToken>' +'</wsse:Security>' +'</soap:Header>'; endsr; //--------------------------------------------------------------------- --* // assembleSOAPbody; * //--------------------------------------------------------------------- --* begsr assembleSOAPbody; subscriberId = '3'; transactionIdIn = %trim(lastTransaction); soapBody = '<soap:Body>' +'<dequeue2>' +'<subscriberId>' + subscriberId +'</subscriberId>' +'<transactionIdIn>' + transactionIdIn +'</transactionIdIn>' +'</dequeue2>' +'</soap:Body>' +'</soap:Envelope>'; endsr; /end-free * *---------------------------------------------------------------------- --* * Incoming - Scott Klements procedure used to extract data from the XML * * response returned from the Web Service. This procedure gets * * run for each element in the XML. * *---------------------------------------------------------------------- --* * P Incoming B * D Incoming PI D rate 8F D depth 10I 0 value D name 1024A varying const D path 24576A varying const D value likeds(XmlString_t) D attrs * dim(32767) D const options(*varsize) * /free // This value is not base64 encoded. // I can't figure out how to get data into this field. if name = 'count'; p_var = value.data; count = %dec(%subst(var:1:value.len):5:0); // This value is base 64 encoded, I can't seem to get this to work? elseif name = 'transactions'; %len(resultVar) = %len(resultVar : *MAX); decodedLen = base64_decode( value.data : value.len : %addr(resultVar : *data) : %len(resultVar : *MAX) ); %len(resultVar) = decodedLen; // This value is not base64 encoded - not sure how to retrieve it? // I can't figure out how to get data into this field. elseif name = 'transactionIdOut'; p_var = value.data; transactionIdOut = %dec(%subst(var:1:value.len):17:0); endif; /end-free * P Incoming E * The http_url_post_xml executes successfully rc = 1. I get good values in the variables count and transactionIdOut without any issue. The data in field resultVar is supposed to be an XML document, however I am having a very tough time doing anything with this data.Ultimately what I want to do is parse the data in resultVar and write it into our database. When I attempt to view the data in variable resultVar (using STRDBG from a green screen command line) it is unreadable. It doesn't look like an XML document. Next I try and open() a new file in the IFS and write the data to this file. fd1 = open('/home/PAULRE/perfDataXML.xml' : O_RDWR+O_CREAT+O_TRUNC+O_CCSID : 438 : 1208); callp write(fd1 : %addr(resultVar) : %len(%trim(resultVar))); When I look at this file on the IFS using notepad, it indeed looks like an XML file however the first few characters are messed up. Normally an XML document starts out like this: <?xml version="1.0" encoding="UTF-8"?> When I look at the document I created (using Notepad) it starts out with 2 blank spaces and then continues like this: __??xml version="1.0" encoding="UTF-8"?> It also appears as if the document doesn't have the correct ending. By that I mean that I don't believe this XML is "well formed" (I believe that's the correct term). It starts with <tranBlock> however it ends with </tranBl like it was truncated??? I've tried many different variations on the open() and the write() but I cannot seem to create a document that I can parse. I've read Scott's "RPG and the IFS": I found it very helpful, but I know I don't understand all of it. I apologize for asking so many questions but I'm really kind of stuck and would appreciate any help. I'm very new to this and I find it very challenging. Also I'm attaching a copy of of perfDataXML that I opened and then saved in Notepad. Again...any help would be greatly appreciated, thanks very much and have a great day! ___________________________________________________________ Paul Reid Application Developer III Erb Group of Companies | 290 Hamilton Road | New Hamburg, Ontario | N3A 1A2 Phone: 519.662.6133 ext. 2363 Web: [2]http://www.erbgroup.com/ From: Scott Klement <sk@xxxxxxxxxxxxxxxx> To: HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx> Date: 12/16/2013 09:51 PM Subject: Re: Advice on how to process xsd:base64Binary XML element retrieved from a web service. Sent by: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx __________________________________________________________________ Hello Paul, 1) Sorry about the data type... should've been A=alphanumeric. I must've forgotten that. 2) I have no way of knowing what the data is or how you plan to use it, so I'm not really sure how to help you here. You say it's XML -- okay, so what do you want to do with the XML? If the goal is to parse it, then either save it into a variable, and pass that into an XML parser, or save it to a file (which would be much easier if the data isn't already EBCDIC -- though, that'd also run slightly slower.) 3) To get this from the pointer, you need a based variable and you need to use %SUBST. D var s 50a based(p_var) D count s 9p 0 D transactionId s 15p 0 /free . . if name = 'count'; p_var = value.data; count = %dec( %subst(var:1:value.len): 9 : 0 ); elseif name = 'transactionIdOut'; p_var = value.data; transactionId = %dec( %subst(var:1:value.len) : 15 : 0 ); . . Note: All of this is off the top of my head and untested. It's expected that you will be able to troubleshoot/fix any problems with it. On 12/16/2013 3:32 PM, PReid@xxxxxxxxxxxx wrote: > Hello again. > I feel like I'm getting closer with this, but I'm still not there. Just > to refresh your memory the Response XML that I get back looks like > this: > <soapenv:Body> > <dequeue2Response> > <dequeue2Return> > <count>6</count> > > <transactions>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz...=</transactions> > <transactionIdOut>58744654</transactionIdOut> > </dequeue2Return> > </dequeue2Response> > </soapenv:Body> > I implemented the code that Scott recommended into my program, and I > think it is working, I just have a few questions. > #1. I could not define the "resultVar" variable as it was shown below > (without a Variable Type). I kept getting the following errors: > NF3391E The LEN keyword is valid only for Data Structures, or for type > A, C, or G; keyword is ignored. > RNF3365E Keyword VARYING is allowed only for an item defined as > character, graphic, or UCS-2. > RNF3438E LIKE keyword is expected for field RESULTVAR but not found; > definition is ignored. > I defined it as Variable Type "C" which i believe means UCS-2...but I'm > not sure if this is correct. It might depend on question #2 below. > > #2. The "transactions" element is base64 encoded and I believe that the > example code that Scott showed me is in fact decoding it...I am just at > a loss as to what to do with it. The data that is encoded in the > element, is itself, an XML document. I am thinking that I should write > this out to a temporary file on the IFS and then parse it later in the > program?,..but I don't know how to output an XML to the IFS?...I'm also > not sure if this is the best way to handle this situation...In the end > I want to write this data into files on our IBMi. > > #3. The "count" and "transactionIdOut" elements are not base64 encoded, > however; I do need the data returned in these fields. With the changes > that I've made to my "Incoming" procedure, I can't seem to retrieve the > data stored in the "value" field. How do I get these values out of the > new "value" data structure? > Below I am including...what I think...is the relevant portions of code > from my program. I can supply the entire program if you want. > * > *---------------------------------------------------------------------- > --* > * > D Incoming PR > D rate 8F > D depth 10I 0 value > D name 1024A varying const > D path 24576A varying const > D value likeds(Xmlstring_t) > D attrs * dim(32767) > D const options(*varsize) > * > * Log. > D dequeue2... > D S 1000A varying > * > * Can't figure out how to get the data into these fields. > D count... > D S 5P 0 inz(*zeros) > D transactionIdOut... > D S 17P 0 inz(*zeros) > * > * Not sure if resultVar is defined correctly? > D resultVar S C len(2000000) varying > D decodedLen S 10I 0 > * > *---------------------------------------------------------------------- > --* > * > // Write out a Log. > dequeue2 = '/home/PAULRE/dequeue2.txt'; > http_debug(*ON : dequeue2); > // Change the way the XML parser returns the data. > // We need to use pointer since it is so large... > http_XmlReturnPtr(*on); > // Post. > rc = http_url_post_xml( > 'https://www.myshawtracking.ca:443/otsWebWS/services/OTSWebSvcs' > : %addr(SOAP) + 2 > : %len(SOAP) > : *NULL > : %paddr(Incoming) > : %addr(rate) > : HTTP_TIMEOUT > : HTTP_USERAGENT > : 'text/xml' > : 'http://www.qualcomm.com/dequeue2'); > // Success!!! > if rc = 1; > * > *---------------------------------------------------------------------- > --* > * > P Incoming B > * > D Incoming PI > D rate 8F > D depth 10I 0 value > D name 1024A varying const > D path 24576A varying const > D value likeds(XmlString_t) > D attrs * dim(32767) > D const options(*varsize) > * > /free > // This value is not base64 encoded. > // I can't figure out how to get data into this field. > if name = 'count'; > // count = %dec(value:5:0); > // This value is base 64 encoded, I think this is working, and the > data is > // in resultVar...now what do I do with it? > elseif name = 'transactions'; > %len(resultVar) = %len(resultVar : *MAX); > decodedLen = base64_decode( value.data > : value.len > : %addr(resultVar : *data) > : %len(resultVar : *MAX) ); > %len(resultVar) = decodedLen; > // This value is not base64 encoded - not sure how to retrieve it? > // I can't figure out how to get data into this field. > elseif name = 'transactionIdOut'; > // transactionIdOut = %dec(value:17:0); > endif; > /end-free > * > P Incoming E > Thanks very much for your time. If there is any more information you > need, just let me know. > Have a great day! > ___________________________________________________________ > Paul Reid > Application Developer III > Erb Group of Companies | 290 Hamilton Road | New Hamburg, Ontario | N3A > 1A2 > Phone: 519.662.6133 ext. 2363 > Web: [1][3]http://www.erbgroup.com/ > From: Scott Klement <sk@xxxxxxxxxxxxxxxx> > To: HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx> > Date: 12/13/2013 12:56 AM > Subject: Re: Advice on how to process xsd:base64Binary XML > element retrieved from a web service. > Sent by: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx > __________________________________________________________________ > > hi Paul, > HTTPAPI was originally written for OS/400 V4R2, and therefore does not > "directly" support variables longer than 65535 characters long. > However, > in many cases HTTPAPI does have pointer-based interfaces that allow > data > as large as 16 MB to be returned -- so in order to handle data "up to > approx 1 MB" you will want to use the pointer-based interfaces. You > can > use them in conjunction with V7R1's support for large variables. > Steps: > 1) Before calling http_url_post_xml(), you should call > http_XmlReturnPtr(*ON). What this does is change the way the XML > parser > returns data. Instead of returning as a 65535 character string, it > will > now return it as a data structure, that has subfield for a pointer, and > a subfield with a 10i 0 integer containing the length of the string in > bytes. > D XmlString_t ds qualified Template > D Data * > D Len 10i 0 > 2) Change your 'Incoming' procedure (NOTE: you can call this procedure > whatever you like, it does not have to be 'Incoming', that was just a > name I used as an example) to receive this data structure in place of > the 'value' string. > D Incoming PR > D rate 8F > D depth 10I 0 value > D name 1024A varying const > D path 24576A varying const > D value likeds(XmlString_t) > D attrs * dim(32767) > D const options(*varsize) > 3) Now that 'value' is coming in as a pointer, it can be as large as > you > want. You can now pass the 'value' parameter to tbe base64_decode > procedure to eliminate the base64 encoding. Personally I like to use a > VARYING variable for this sort of thing, and there's a trick to working > with VARYING as a pointer... you need to set it's length to the > maximum length first, then pass the address of only the data portion, > then set it's length back to the returned length. > D resultVar s len(2000000) varying > %len(resultVar) = %len(resultVar: *MAX); > decodedlen = base64_decode( value.data > : value.len > : %addr(resultVar: *data) > : %len(ResultVar: *MAX) ); > %len(resultVar) = decodedlen; > 4) Now you have the decoded data in 'resultVar'. However, you should > know that this data will have the exact same binary value that it had > when it was encoded. If your data is text and the sender had it > encoded > in ASCII (or Unicode), then your data in resultVar will in ASCII, so > you'll probably want to translate it to EBCDIC next. > If the data in resultVar is not text, like an image, PDF, Word > Document, > sound file, etc... then you won't want to translate it to EBCDIC, as > that would corrupt the data. (That is what is meant by 'binary') > 5) Not sure what you want to do next, it'll depend on the purpose of > this data. Should it be written to the IFS? Stored in a BLOB? So > I'll > leave that part as an exercise for you. > Good luck.... > On 12/12/2013 9:48 AM, PReid@xxxxxxxxxxxx wrote: > > Hello everyone. I am not very experienced with Web Services so > bear > > with me. I did a fair bit of research on the various forums > before > > posting, but I failed to find a good example of what I am looking > for. > > I'm hoping that someone can help, possibly with an example. > > I am predominately an RPG programmer. We are running an IBM Power > 7 at > > V7R1, and I have Scott's HTTPAPI V1.24 downloaded and installed. > I am > > using HTTPAPI to consume another Web Service and it works > beautifully. > > My latest challenge it that I have consume a Web Service that > includes > > an element in the XML response that is data type xsd:base64Binary > and > > I'm not really sure how to do it. The WSDL for this web service > is: > > > [1][2][4]https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsd l/O > TSW > > ebSvcs.wsdl > > The WIKI for this Web Service is: > > > [2][3][5]https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume +De > que > > ue > > The method that I must consume is named DEQUEUE2. > > I have created an RPG program that POSTS a request to the Web > Service > > using the following HTTPAPI subprocedure: > > rc = http_url_post_xml( > > > > 'https://www.myshawtracking.ca:443/otsWebWS/services/OTSWebSvcs' > > : %addr(SOAP) + 2 > > : %len(SOAP) > > : *NULL > > : %paddr(Incoming) > > : %addr(rate) > > : HTTP_TIMEOUT > > : HTTP_USERAGENT > > : 'text/xml' > > : 'http://www.qualcomm.com/dequeue2'); > > I am receiving rc = 1 which I believe means that I am > successfully > > receiving an XML response. FYI - The procedure "Incoming" was > copied > > from Scott's EXAMPLE11. > > The response XML is as follows. > > <soapenv:Body> > > <dequeue2Response> > > <dequeue2Return> > > <count>6</count> > > <transactionIdOut>58744654</transactionIdOut> > > (transactions> > > PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48dHJjaz4= > > </transactions> > > </dequeue2Return> > > </dequeue2Response> > > </soapenv:Body> > > The "transactions" element is xsd:base64Binary and I don't know > how to > > decode it. I have downloaded Scott's BASE64R4 service program and > I > > suspect I'd use procedure BASE64_DECODE, but I'm not sure how I > would > > employ it in this situation. Also...according to the wiki the > > "transactions" element could be as large as "Approximately 1mb" > > although I'm not really sure what they mean by approximately?? > > The "count" and "transactionIdOut" and not encoded and I need the > data > > in them in addition to the encoded data. > > I understand that I may not even be using the correct post > procedure > > (remember I'm not that experienced) and in the interim I am going > to > > try some of Scott's other procedures. > > Any help or examples on how to get this data would be much > appreciated. > > Thanks! > > ___________________________________________________________ > > Paul Reid > > Application Developer III > > Erb Group of Companies | 290 Hamilton Road | New Hamburg, Ontario > | N3A > > 1A2 > > Phone: 519.662.6133 ext. 2363 > > Web: [3][4][6]http://www.erbgroup.com/ > > > > References > > > > 1. > [5][7]https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/O TSW > ebSvcs.wsdl > > 2. > [6][8]https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+De que > ue > > 3. [7][9]http://www.erbgroup.com/ > > > > > > > > > ----------------------------------------------------------------------- > > This is the FTPAPI mailing list. To unsubscribe, please go to: > > [8][10]http://www.scottklement.com/mailman/listinfo/ftpapi > > > ----------------------------------------------------------------------- > ----------------------------------------------------------------------- > This is the FTPAPI mailing list. To unsubscribe, please go to: > [9][11]http://www.scottklement.com/mailman/listinfo/ftpapi > ----------------------------------------------------------------------- > > References > > 1. [12]http://www.erbgroup.com/ > 2. [13]https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/OTS W > 3. [14]https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+Dequ e > 4. [15]http://www.erbgroup.com/ > 5. [16]https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/OTS WebSvcs.wsdl > 6. [17]https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+Dequ eue > 7. [18]http://www.erbgroup.com/ > 8. [19]http://www.scottklement.com/mailman/listinfo/ftpapi > 9. [20]http://www.scottklement.com/mailman/listinfo/ftpapi > > > > ----------------------------------------------------------------------- > This is the FTPAPI mailing list. To unsubscribe, please go to: > [21]http://www.scottklement.com/mailman/listinfo/ftpapi > ----------------------------------------------------------------------- ----------------------------------------------------------------------- This is the FTPAPI mailing list. To unsubscribe, please go to: [22]http://www.scottklement.com/mailman/listinfo/ftpapi ----------------------------------------------------------------------- References 1. https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/ 2. http://www.erbgroup.com/ 3. http://www.erbgroup.com/ 4. https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/O 5. https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+De 6. http://www.erbgroup.com/ 7. https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/OTSW 8. https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+Deque 9. http://www.erbgroup.com/ 10. http://www.scottklement.com/mailman/listinfo/ftpapi 11. http://www.scottklement.com/mailman/listinfo/ftpapi 12. http://www.erbgroup.com/ 13. https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/OTSW 14. https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+Deque 15. http://www.erbgroup.com/ 16. https://www.myshawtracking.ca/otsWebWS/services/OTSWebSvcs/wsdl/OTSWebSvcs.wsdl 17. https://intinfo.myqualcomm.com/display/iWebInt/ESS+High-Volume+Dequeue 18. http://www.erbgroup.com/ 19. http://www.scottklement.com/mailman/listinfo/ftpapi 20. http://www.scottklement.com/mailman/listinfo/ftpapi 21. http://www.scottklement.com/mailman/listinfo/ftpapi 22. http://www.scottklement.com/mailman/listinfo/ftpapi
Attachment:
perfDataXML.xml
Description: Binary data
----------------------------------------------------------------------- This is the FTPAPI mailing list. To unsubscribe, please go to: http://www.scottklement.com/mailman/listinfo/ftpapi -----------------------------------------------------------------------