[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: New to XML - Dequeue2 Request Issue



   Here is my full code, less proprietary info.  I wouldn't normally
   include D specs, but I want to be sure all of my bases are covered.
   0012.00 H DFTACTGRP(*NO) BNDDIR('HTTPAPI':'QC2LE':'BASE64')
   0013.00  /define DEBUGGING
   0014.00
   0020.00  /copy httpapi_h
   0021.00  /copy base64_h
   0022.00  /copy ifsio_h
   0023.00
   0024.00 D QCMDEXC         PR                  ExtPgm('QCMDEXC')
   0025.00 D   command                  32702a   const options(*varsize)
   0026.00 D   len                         15p 5 const
   0027.00 D   igc                          3a   const options(*nopass)
   0028.00
   0029.00 D SOAP            s          32767A   varying
   0030.00 D rc              s             10I 0
   0031.00 D fd              s             10I 0
   0032.00 D soapfile        s             50a   varying
   0033.00 D embfile         s             50a   varying
   0034.00 D fuel            ds                  likeds(fuel_t)
   0035.00 D cmd             s            200A
   0036.00 D wait            s              1A
   0037.00
   0038.00 D SaveEmbed       PR
   0039.00 D   embfile                     50a   varying
   0040.00 D   depth                       10I 0 value
   0041.00 D   name                      1024A   varying const
   0042.00 D   path                     24576A   varying const
   0043.00 D   value                    32767A   varying const
   0044.00 D   attrs                         *   dim(32767)
   0045.00 D                                     const options(*varsize)
   0046.00
   0047.00 D fuel_t          ds                  qualified
   0048.00 D                                     based(Template)
   0049.00 D   vehicle                     20a   varying
   0050.00 D   driver                      30a   varying
   0051.00 D   comp                        30a   varying
   0052.00
   0053.00 D embedded        PR
   0054.00 D   fuel                              likeds(fuel_t)
   0055.00 D   depth                       10I 0 value
   0056.00 D   name                      1024A   varying const
   0057.00 D   path                     24576A   varying const
   0058.00 D   value                    32767A   varying const
   0059.00 D   attrs                         *   dim(32767)
   0060.00 D                                     const options(*varsize)

   0061.00 D                 ds

   0062.00 D DS_TimeStamp                    z

   0063.00 D  ds_curdate                   10    overlay(ds_timestamp:1)

   0064.00 D  ds_curtime                   12    overlay(ds_timestamp:12)

   0065.00

   0066.00 D                 ds

   0067.00 D DS_TimeStampB                   z

   0068.00 D  ds_curdateB                  10    overlay(ds_timestampB:1)

   0069.00 D  ds_curtimeB                  12    overlay(ds_timestampB:12)

   0070.00

   0071.00 D createdate      s             10

   0072.00 D createtime      s             12

   0073.00 D expiredate      s             10

   0074.00 D expiretime      s             12

   0075.00 D reqfrmdate      s             10

   0076.00 D reqtodate       s             10

   0077.00 D digit1099       s              1

   0078.00

   0079.00 D tokentxt        s             18a   varying

   0080.00 D token64         s             24a
   0081.00 D p_tokenUTF      s               *
   0082.00 D utflen          s             10i 0
   0083.00 D b64len          s             10i 0
   0084.00 D timoffset       s              3  0
   0085.00 D lasttrip        s              8
   0086.00
   0087.00 C     *entry        plist
   0088.00 C                   parm                    timoffset
   0089.00 C                   parm                    lasttrip
   0090.00
   0091.00 C                   Time                    DS_TimeStamp
   0092.00
   0093.00  /free
   0094.00  /if defined(DEBUGGING)
   0095.00    http_debug(*ON);
   0096.00  /endif
   0097.00    *inlr = *on;
   0098.00
   0099.00   DS_TimeStampB = DS_TimeStamp;
   0100.00

   0101.00   // Calculate UTC Create Time And Date

   0102.00   timoffset = timoffset * -1;

   0103.00   DS_TimeStamp = DS_TimeStamp + %minutes(timoffset);

   0104.00   createdate = ds_curdate;

   0105.00   createtime = ds_curtime;

   0106.00   %subst(createtime:3:1) = ':';

   0107.00   %subst(createtime:6:1) = ':';

   0108.00

   0109.00   // Calculate UTC Expire Time And Date

   0110.00   DS_TimeStamp = DS_TimeStamp + %minutes(5);

   0111.00   expiredate = ds_curdate;

   0112.00   expiretime = ds_curtime;

   0113.00   %subst(expiretime:3:1) = ':';

   0114.00   %subst(expiretime:6:1) = ':';

   0115.00

   0116.00   // Calculate UTC Requested To Date

   0117.00   DS_TimeStampB = DS_TimeStampB - %days(1);

   0118.00   reqtodate = ds_curdateB;

   0119.00

   0120.00   // Calculate UTC Requested From Date
   0121.00   DS_TimeStampB = DS_TimeStampB - %days(1);
   0122.00   reqfrmdate = ds_curdateB;
   0123.00
   0124.00   http_setCCSIDs( 1208: 0 );
   0125.00
   0126.00   tokentxt = %triml(createdate + createtime);
   0127.00
   0128.00   utflen = HTTP_xlatedyn( %len(tokentxt)
   0129.00                         : %addr(tokentxt) + 2
   0130.00                         : TO_ASCII
   0131.00                         : p_tokenUTF );
   0132.00
   0133.00   b64len = base64_encode( p_tokenUTF
   0134.00                         : utflen
   0135.00                         : %addr(token64)
   0136.00                         : %size(token64) );
   0137.00
   0138.00   dealloc p_tokenUTF;
   0139.00
   0140.00   // Note:  http_debug(*ON/*OFF) can be used to turn debugging

   0141.00   //        on and off.  When debugging is turned on,
   diagnostic
   0142.00   //        info is written to an IFS file named

   0143.00   //        /tmp/httpapi_debug.txt

   0144.00

   0145.00   //http_debug(*ON);

   0146.00

   0147.00   // Note:  http_XmlStripCRLF(*ON/*OFF) controls whether or not

   0148.00   //        the XML parser removes CR and LF characters from
   the
   0149.00   //        Xml data that's passed to your 'Incoming'
   procedure.
   0150.00

   0151.00   http_XmlStripCRLF(*ON);

   0152.00

   0153.00   SOAP =

   0154.00    '<?xml version="1.0" encoding="UTF-8" standalone="no"?>'

   0155.00   +'<SOAP-ENV:Envelope'

   0156.00   +'
   xmlns:SOAP-ENV="[1]http://schemas.xmlsoap.org/soap/envelope/";'
   0157.00   +'    xmlns:web="[2]http://websvcs.otswebws";>'

   0158.00   +'<SOAP-ENV:Header>'

   0159.00   +'    <wsse:Security SOAP-ENV:mustUnderstand="1"'

   0160.00   +'
   xmlns:wsse="[3]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
   0161.00   +'wss-wssecurity-secext-1.0.xsd">'

   0162.00   +'    <wsu:Timestamp wsu:Id="Timestamp-6"'

   0163.00   +'
   xmlns:wsu="[4]http://docs.oasis-open.org/wss/2004/01/oasis-200401'
   0164.00   +'-wss-wssecurity-utility-1.0.xsd">'

   0165.00   +'
   <wsu:Created>'+createdate+'T'+createtime+'Z</wsu:Created>'
   0166.00   +'
   <wsu:Expires>'+expiredate+'T'+expiretime+'Z</wsu:Expires>'
   0167.00   +'    </wsu:Timestamp>'

   0168.00   +'    <wsse:UsernameToken wsu:Id="UsernameToken-5" xmlns:wsu'

   0169.00   +'="[5]http://docs.oasis-open.org/wss/2004/01/oasis-200401-'

   0170.00   +'wss-wssecurity-utility-1.0.xsd">'

   0171.00   +'    <wsse:Username>XXXXXXXXXX</wsse:Username>'

   0172.00   +'    <wsse:Password Type="[6]http://docs.oasis-open.org/wss'

   0173.00   +'/2004/01/oasis-200401-wss-username-token-profile-1.0'

   0174.00   +'#PasswordText">XXXXXXXXXX</wsse:Password>'

   0175.00   +'    <wsse:Nonce
   EncodingType="[7]http://docs.oasis-open.org/'
   0176.00   +'wss/2004/01/oasis-200401-wss-soap-message-security-'

   0177.00   //+'1.0#Base64Binary">Qcw0k1jjcEvvrNldT3ex1A==</wsse:'

   0178.00   +'1.0#Base64Binary">'+token64+'</wsse:'

   0179.00   +'Nonce>'

   0180.00   +'
   <wsu:Created>'+createdate+'T'+createtime+'Z</wsu:Created>'
   0181.00   +'    </wsse:UsernameToken>'

   0182.00   +'    </wsse:Security>'

   0183.00   +'</SOAP-ENV:Header>'

   0184.00   +'<SOAP-ENV:Body>'

   0185.00   +'    <web:dequeue2>'

   0186.00   +'         <subscriberId>3</subscriberId>'

   0187.00   +'         <transactionIdIn>0</transactionIdIn>'

   0188.00   +'    </web:dequeue2>'

   0189.00   +'</SOAP-ENV:Body>'

   0190.00   +'</SOAP-ENV:Envelope>';

   0191.00

   0192.00   http_debug(*ON);

   0193.00

   0194.00     soapfile = '/tmp/OmniTracsFuelRaw.soap';

   0195.00

   0196.00     rc = http_url_post(

   0197.00

   0198.00
   'https://services.omnitracs.com:443/otsWebWS/services/OTSWebSvcs'
   0199.00                     : %addr(SOAP) + 2

   0200.00                     : %len(SOAP)
   0201.00                     : soapfile
   0202.00                     : HTTP_TIMEOUT
   0203.00                     : HTTP_USERAGENT
   0204.00                     : 'text/xml'
   0205.00                     : 'ETS Test');
   0206.00
   0207.00   if (rc <> 1);
   0208.00      unlink(soapfile);
   0209.00      http_crash();
   0210.00   endif;
   0211.00
   0212.00   // ----------------------------------------------
   0213.00   //   The response from the server will be in
   0214.00   //   the IFS in a file with a unique name.
   0215.00   //   that IFS filename is in the "tempfile"
   0216.00   //   variable at this point.
   0217.00   //
   0218.00   //   For debugging purposes, display the
   0219.00   //   contents of that file, now.
   0220.00   // ----------------------------------------------
   0221.00  /if defined(DEBUGGING)
   0222.00      dsply ('Press <ENTER> to see SOAP response') ' ' wait;
   0223.00      cmd = 'DSPF STMF(''' + soapfile + ''')';
   0224.00      QCMDEXC(cmd: %len(cmd));
   0225.00  /endif
   0226.00
   0227.00    // ----------------------------------------------
   0228.00    //  Parse the SOAP document (the one in soapfile)
   0229.00    //  Inside it will be another XML document that's
   0230.00    //  embedded within -- save that to a separate
   0231.00    //  file in the IFS.
   0232.00    // ----------------------------------------------
   0233.00
   0234.00      embfile = '/tmp/OmniTracsFuelFin.soap';
   0235.00
   0236.00      if (http_parse_xml_stmf( soapfile
   0237.00                             : HTTP_XML_CALC
   0238.00                             : *null
   0239.00                             : %paddr(SaveEmbed)
   0240.00                             : %addr(embfile) ) < 0);
   0241.00          callp close(fd);
   0242.00          unlink(soapfile);
   0243.00          unlink(embfile);
   0244.00          http_crash();
   0245.00      endif;
   0246.00
   0247.00      unlink(soapfile);
   0248.00
   0249.00    // ----------------------------------------------
   0250.00    //   For the sake of debugging, display the
   0251.00    //   contents of the embedded XML document
   0252.00    //   (Remove from production code)
   0253.00    // ----------------------------------------------
   0254.00
   0255.00  /if defined(DEBUGGING)
   0256.00      dsply ('Press <ENTER> to see extracted XML') ' ' wait;
   0257.00      cmd = 'DSPF STMF(''' + embfile + ''')';
   0258.00      QCMDEXC(cmd: %len(cmd));
   0259.00  /endif
   0260.00
   0261.00    // ----------------------------------------------
   0262.00    //    Parse the second XML document (the one
   0263.00    //    that was embedded)
   0264.00    // ----------------------------------------------
   0265.00      fuel = *allx'00';
   0266.00      if (http_parse_xml_stmf( embfile
   0267.00                             : HTTP_XML_CALC
   0268.00                             : *null
   0269.00                             : %paddr(Embedded)
   0270.00                             : %addr(fuel) ) < 0);
   0271.00          unlink(embfile);
   0272.00          http_crash();
   0273.00      endif;
   0274.00
   0275.00
   0276.00   *inlr = *on;
   0277.00
   0278.00  /end-free
   0279.00
   0280.00 P SaveEmbed       B
   0281.00 D SaveEmbed       PI
   0282.00 D   embfile                     50a   varying
   0283.00 D   depth                       10I 0 value
   0284.00 D   name                      1024A   varying const
   0285.00 D   path                     24576A   varying const
   0286.00 D   value                    32767A   varying const
   0287.00 D   attrs                         *   dim(32767)
   0288.00 D                                     const options(*varsize)
   0289.00
   0290.00 D writeConst      PR            10I 0 ExtProc('write')
   0291.00 D  fildes                       10i 0 value
   0292.00 D  buf                       65535A   const options(*varsize)
   0293.00 D  bytes                        10U 0 value
   0294.00
   0295.00 D xmlhdr          s             80a   varying
   0296.00 D fd              s             10i 0
   0297.00
   0298.00  /free
   0299.00  //    if (name <> 'GetABADetailsByRoutingNumberResult');
   0300.00  //      return;
   0301.00  //    endif;
   0302.00
   0303.00       // ------------------------------------------
   0304.00       //   create new stream file in IFS
   0305.00       //   tag it with CCSID 1208 (UTF-8)
   0306.00       // ------------------------------------------
   0307.00
   0308.00       unlink(embfile);
   0309.00       fd = open(embfile: O_CREAT+O_CCSID+O_WRONLY
   0310.00                        : S_IRUSR + S_IWUSR: 819);
   0311.00       callp close(fd);
   0312.00
   0313.00       // ------------------------------------------
   0314.00       //    Open stream file for appending data
   0315.00       //    and write embedded XML document to it
   0316.00       // ------------------------------------------
   0317.00
   0318.00       fd = open(embfile: O_WRONLY+O_TEXTDATA);
   0319.00
   0320.00       xmlhdr= '<?xml version="1.0" encoding="UTF-8"?>' +
   x'0d25';
   0321.00       writeConst(fd: xmlhdr: %len(xmlhdr));

   0322.00       writeConst(fd: value:  %len(value));

   0323.00

   0324.00       callp close(fd);

   0325.00  /end-free

   0326.00 P                 E

   0327.00

   0328.00

   0329.00 P embedded        B

   0330.00 D embedded        PI

   0331.00 D   fuel                              likeds(fuel_t)

   0332.00 D   depth                       10I 0 value

   0333.00 D   name                      1024A   varying const

   0334.00 D   path                     24576A   varying const

   0335.00 D   value                    32767A   varying const

   0336.00 D   attrs                         *   dim(32767)

   0337.00 D                                     const options(*varsize)

   0338.00

   0339.00  /free

   0340.00     select;
   0341.00     when name = 'vehicleID';
   0342.00        fuel.vehicle = %trimr(value);
   0343.00     when name = 'driverName';
   0344.00        fuel.driver = %trimr(value);
   0345.00     when name = 'companyName';
   0346.00        fuel.comp = %trimr(value);
   0347.00     endsl;
   0348.00  /end-free
   0349.00 P                 E
   Here are my results as seen in step 221.00:
    ************Beginning of data**************

   <soapenv:Envelope
   xmlns:soapenv="[8]http://schemas.xmlsoap.org/soap/envelope/";
   xmlns:soapenc="[9]http://schemas.xmlsoap.org/soap/encoding/
   " xmlns:xsd="[10]http://www.w3.org/2001/XMLSchema";
   xmlns:xsi="[11]http://www.w3.org/2001/XMLSchema-instance";><soapenv:Head
   er/><soapenv:Body>
   <p917:dequeue2Response
   xmlns:p917="[12]http://websvcs.otswebws";><dequeue2Return><count>1</coun
   t><transactions>PD94bWwgdmVyc2lvbj0iMS4wIi
   BlbmNvZGluZz0iVVRGLTgiPz48dHJhbkJsb2NrPjx0cmFuIElEPSI0ODQ5MTgiIGNvbXBhb
   nlJRD0iRkFSTkVSQk9DSyIgYXV4SUQ9IjA1NDYwNTk4MjQiPjxULjIuUk0wMS
   4wPjxldmVudFRTPjIwMTUtMDktMjJUMjE6MzM6MDZaPC9ldmVudFRTPjxlcXVpcG1lbnQgS
   UQ9IkJBR1VOSVQiIGVxdWlwVHlwZT0idHJhY3RvciIgdW5pdEFkZHJlc3M9Ij
   AxMDcwNTI2OTAiIG1vYmlsZVR5cGU9IjgiLz48ZHJpdmVySUQ+VFJBSU5FUjwvZHJpdmVyS
   UQ+PHBvc2l0aW9uIGxvbj0iLTk0LjgzNzU5MiIgbGF0PSI0Mi4wNjYwMTgiIH
   Bvc1RTPSIyMDE1LTA5LTIyVDE0OjU0OjIyWiIvPjxwb3NUeXBlPjM8L3Bvc1R5cGU+PGlnb
   ml0aW9uU3RhdHVzPjE8L2lnbml0aW9uU3RhdHVzPjx0cmlwU3RhdHVzPk88L3
   RyaXBTdGF0dXM+PEdNSD4wMDEwMTgwMzE8L0dNSD48cmVjZWl2ZWRUUz4yMDE1LTA5LTIyV
   DIxOjM2OjU2WjwvcmVjZWl2ZWRUUz48bXNnUHJpb3JpdHk+MDwvbXNnUHJpb3
   JpdHk+PG1hY3JvQm9keT48bWFjcm9UeXBlIGRpcmVjdGlvbj0iUiIgbnVtYmVyPSIxIiB2Z
   XJzaW9uPSIyIj5UUlVDSyBGVUVMPC9tYWNyb1R5cGU+PG1hY3JvRmllbGQgZG
   ljdFRhZz0idmVoaWNsZUlkIj5CMDE8L21hY3JvRmllbGQ+PG1hY3JvRmllbGQgZGljdFRhZ
   z0iZHJpdmVyTmFtZSI+QklMTFkgQk9CPC9tYWNyb0ZpZWxkPjxtYWNyb0ZpZW
   xkIGRpY3RUYWc9ImNvbXBhbnlOYW1lIj5TUEFSS1lTIENBUlJPTEw8L21hY3JvRmllbGQ+P
   G1hY3JvRmllbGQgZGljdFRhZz0ic3RhdGUiPklBPC9tYWNyb0ZpZWxkPjxtYW
   Nyb0ZpZWxkIGRpY3RUYWc9ImdhbGxvbnMiPjUwPC9tYWNyb0ZpZWxkPjxtYWNyb0ZpZWxkI
   GRpY3RUYWc9ImNvc3Qgb2YgZnVlbCI+MjAwLjAwPC9tYWNyb0ZpZWxkPjxtYW
   Nyb0ZpZWxkIGRpY3RUYWc9IndlaWdodCI+NTAwPC9tYWNyb0ZpZWxkPjwvbWFjcm9Cb2R5P
   jwvVC4yLlJNMDEuMD48L3RyYW4+PC90cmFuQmxvY2s+</transactions><tr
   ansactionIdOut>484918</transactionIdOut></dequeue2Return></p917:dequeue
   2Response></soapenv:Body></soapenv:Envelope>
    ************End of Data********************
   My results as seen in step 255.00
    ************Beginning of data**************
   <?xml version="1.0" encoding="UTF-8"?>
    ************End of Data********************
   When I move on to the next step, I get "XML parse failed at line 2, col
   0, element not found."  What am I missing?
   Thanks for the feedback.

   Corby Weaver
   From:        Mike Krebs <mkrebs@xxxxxxxxxxxxxxxxxx>
   To:        HTTPAPI and FTPAPI Projects <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>,
   Date:        12/07/2015 10:37 AM
   Subject:        RE: New to XML - Dequeue2 Request Issue
   Sent by:        ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
     __________________________________________________________________

   Nothing stands out to me...you never explained how and where "I'm
   having an issue".
   Post debug. Make sure to scrub proprietary or confidential information.
   -----Original Message-----
   From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
   [[13]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
   corby.weaver@xxxxxxxxxxxxxxxxx
   Sent: Wednesday, December 2, 2015 10:50 AM
   To: HTTPAPI and FTPAPI Projects
   Subject: RE: New to XML - Dequeue2 Request Issue
     I've got my initial file coming in fine (Step 1).  I'm having an
   issue
     with Step 2, parsing the "real" data.
     Here is my code:
         soapfile = '/tmp/OmniTracsFuelRaw.soap';
         rc = http_url_post(

   'https://services.omnitracs.com:443/otsWebWS/services/OTSWebSvcs'
                         : %addr(SOAP) + 2
                         : %len(SOAP)
                         : soapfile
                         : HTTP_TIMEOUT
                         : HTTP_USERAGENT
                         : 'text/xml'
                         : 'ETS Test');
       if (rc <> 1);
          unlink(soapfile);
          http_crash();
       endif;
       // ----------------------------------------------
       //   The response from the server will be in
       //   the IFS in a file with a unique name.
       //   that IFS filename is in the "tempfile"
       //   variable at this point.
       //
       //   For debugging purposes, display the
       //   contents of that file, now.
       // ----------------------------------------------
        // ----------------------------------------------
        //  Parse the SOAP document (the one in soapfile)
        //  Inside it will be another XML document that's
        //  embedded within -- save that to a separate
        //  file in the IFS.
        // ----------------------------------------------
          embfile = '/tmp/OmniTracsFuelFin.soap';
          if (http_parse_xml_stmf( soapfile
                                 : HTTP_XML_CALC
                                 : *null
                                 : %paddr(SaveEmbed)
                                 : %addr(embfile) ) < 0);
              callp close(fd);
              unlink(soapfile);
              unlink(embfile);
              http_crash();
          endif;
          unlink(soapfile);
     Anything stand out?  Thoughts and suggestions are appreciated.
     Thanks!
     Corby Weaver
     From:        Mike Krebs <mkrebs@xxxxxxxxxxxxxxxxxx>
     To:        HTTPAPI and FTPAPI Projects
   <ftpapi@xxxxxxxxxxxxxxxxxxxxxx>,
     Date:        11/20/2015 05:09 PM
     Subject:        RE: New to XML - Dequeue2 Request Issue
     Sent by:        ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
       __________________________________________________________________
     Let's break the project into steps:
     1. Send request and receive response
     2. Parse the IFS file saving the "real" data
     3. Decode the "real" data
     4. Parse the "real" data
     See Example17 for 1, 2, and 4. To decode see Scott's Base64 or the
     built-in support in OS400.
     Alternatively, use WSDL2RPG as in the linked thread to do what you
     need. It is a little harder to understand initially but it will
     generate programs for you to modify for the service. Depending on the
     WSDL, it might do everything you need.
     -----Original Message-----
     From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
     [[1][14]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of
     corby.weaver@xxxxxxxxxxxxxxxxx
     Sent: Friday, November 20, 2015 1:05 PM
     To: HTTPAPI and FTPAPI Projects
     Subject: Re: New to XML - Dequeue2 Request Issue
       Sorry, it is encoded, not encrypted.  There was a similar post a
   few
       years ago where the transaction portion of the XML document was
     parsed
       and I assume the base64 decoder worked.  Being unfamiliar with XML,
   I
       do not know what the code should be for my specific program.
       Here is a link to the previous thread...

   [1][2][15]https://scottklement.com/archives/ftpapi/201210/msg00121.html
       I'm hoping someone is able to help me with the portion of code that
       does the parse.
       Thanks,
       Corby Weaver
     References
       1.
   [3][16]https://scottklement.com/archives/ftpapi/201210/msg00121.html

   -----------------------------------------------------------------------
     This is the FTPAPI mailing list.  To unsubscribe, please go to:
     [4][17]http://www.scottklement.com/mailman/listinfo/ftpapi

   -----------------------------------------------------------------------

   -----------------------------------------------------------------------
     This is the FTPAPI mailing list.  To unsubscribe, please go to:
     [5][18]http://www.scottklement.com/mailman/listinfo/ftpapi

   -----------------------------------------------------------------------
   References
     1. [19]mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
     2. [20]https://scottklement.com/archives/ftpapi/201210/msg00121.html
     3. [21]https://scottklement.com/archives/ftpapi/201210/msg00121.html
     4. [22]http://www.scottklement.com/mailman/listinfo/ftpapi
     5. [23]http://www.scottklement.com/mailman/listinfo/ftpapi
   -----------------------------------------------------------------------
   This is the FTPAPI mailing list.  To unsubscribe, please go to:
   [24]http://www.scottklement.com/mailman/listinfo/ftpapi
   -----------------------------------------------------------------------
   -----------------------------------------------------------------------
   This is the FTPAPI mailing list.  To unsubscribe, please go to:
   [25]http://www.scottklement.com/mailman/listinfo/ftpapi
   -----------------------------------------------------------------------

References

   1. http://schemas.xmlsoap.org/soap/envelope/
   2. http://websvcs.otswebws/
   3. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
   4. http://docs.oasis-open.org/wss/2004/01/oasis-200401'
   5. http://docs.oasis-open.org/wss/2004/01/oasis-200401-'
   6. http://docs.oasis-open.org/wss'
   7. http://docs.oasis-open.org/'
   8. http://schemas.xmlsoap.org/soap/envelope/
   9. http://schemas.xmlsoap.org/soap/encoding/
  10. http://www.w3.org/2001/XMLSchema
  11. http://www.w3.org/2001/XMLSchema-instance
  12. http://websvcs.otswebws/
  13. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  14. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  15. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  16. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  17. http://www.scottklement.com/mailman/listinfo/ftpapi
  18. http://www.scottklement.com/mailman/listinfo/ftpapi
  19. mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx
  20. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  21. https://scottklement.com/archives/ftpapi/201210/msg00121.html
  22. http://www.scottklement.com/mailman/listinfo/ftpapi
  23. http://www.scottklement.com/mailman/listinfo/ftpapi
  24. http://www.scottklement.com/mailman/listinfo/ftpapi
  25. http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------