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

RE: New to XML - Dequeue2 Request Issue



Upon further review, I see you don't understand what happens here:
     if (http_parse_xml_stmf( soapfile
                          : HTTP_XML_CALC
                          : *null
                          : %paddr(SaveEmbed)
                          : %addr(embfile) ) < 0);

The Expat parser and Scott's port of it handle the incoming XML as a stream of elements. There are various ways to parse the XML. The API as called above will call SaveEmbed each time it gets to the end of an element. That is on a </whatever>. By looking at your incoming data, transactions is the inner most element we are interested in. So, my code checks if name matches transactions. It is called a bunch of other times (every time there is a </whatever>) but every other time it does not do anything other than return.

So your SaveEmbed was working but the last element didn't have a "value" with it. So, your code created the file with just the header. You want just the base64 encoded data in the file. Then you can decode the file and parse that for the actual data.


-----Original Message-----
From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx [mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Mike Krebs
Sent: Friday, December 11, 2015 11:47 AM
To: HTTPAPI and FTPAPI Projects
Subject: RE: New to XML - Dequeue2 Request Issue

You didn't make it convenient by including extra data in your post. Many of us don't just read code, we try to code the problem ourselves!

I managed to recreate the SOAPfile data and was able to parse using your saveembed with minor tweak to create the embfile.

I saved the SOAPfile data to a file called /home/mikekr/corby.xml and changed the "data" portion to <transactions>base64stuff</transactions>

Here is my complete program that parses corby.xml and creates embfile with what you need. Change the file names appropriately and see if you have the base64 encoded data in /tmp/OmniTracsFuleFin.soap after you run it.

h bnddir('HTTPAPI')
 /copy httpapi_h
 /copy ifsio_h
  dcl-s embfile  varchar(50);
  dcl-s soapfile varchar(50);
D SaveEmbed       PR
D   embfile                     50a   varying
D   depth                       10I 0 value
D   name                      1024A   varying const
D   path                     24576A   varying const
D   value                    32767A   varying const
D   attrs                         *   dim(32767)
D                                     const options(*varsize)

  http_debug(*on);

  soapfile = '/home/MIKEKR/corby.xml';
  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;
   *inlr = *on;
   //  unlink(soapfile);

P SaveEmbed       B
D SaveEmbed       PI
D   embfile                     50a   varying
D   depth                       10I 0 value
D   name                      1024A   varying const
D   path                     24576A   varying const
D   value                    32767A   varying const
D   attrs                         *   dim(32767)
D                                     const options(*varsize)

D writeConst      PR            10I 0 ExtProc('write')
D  fildes                       10i 0 value
D  buf                       65535A   const options(*varsize)
D  bytes                        10U 0 value
D xmlhdr          s             80a   varying
D fd              s             10i 0
    if name = 'transactions';
    unlink(embfile);
    fd = open(embfile:O_CREAT+O_CCSID+O_WRONLY
              :S_IRUSR + S_IWUSR:819);
    callp close(fd);

    fd = open(embfile: O_WRONLY+O_TEXTDATA);
    writeConst(fd: value:  %len(value));
    callp close(fd);
    endif;
P                 e


-----Original Message-----
From: ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx [mailto:ftpapi-bounces@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of Scott Klement
Sent: Friday, December 11, 2015 8:58 AM
To: HTTPAPI and FTPAPI Projects
Subject: Re: New to XML - Dequeue2 Request Issue

Corby,

I see that a few weeks ago, you acknowledged that the data being sent to
you is base64-encoded..   As far as I can tell, however, you never call
the base64_decode() routine to decode it...   am I missing something?

-SK

On 12/11/2015 8:22 AM, corby.weaver@xxxxxxxxxxxxxxxxx wrote:
>     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
> ----------------------------------------------------------------------
> -
>
>
>
> -----
> No virus found in this message.
> Checked by AVG - www.avg.com
> Version: 2015.0.6176 / Virus Database: 4483/11157 - Release Date:
> 12/11/15

-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
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
-----------------------------------------------------------------------
-----------------------------------------------------------------------
This is the FTPAPI mailing list.  To unsubscribe, please go to:
http://www.scottklement.com/mailman/listinfo/ftpapi
-----------------------------------------------------------------------