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

HTTPAPI (Web Service) sending an XML string as an input parameter to a web service 'brackets'



Well, I gotta say that I'm really a novice at this and although I read over
your response several times and tried several other variations, I'm still
not have any luck whatsoever.  This is my first foray into working with web
services from an RPG and as luck would have it, I've come across this
problem with the straight bracket [] characters.

 I've tried literally hundreds of different variations of encodings, and
parameters and keep failing.

 So I thought I might forward you my source code and see if you could help
define how I would code this RPG as UCS2 and then convert to UTF-8 before
using HTTPAPI.


*-------------------------------------------------------------------------
      *
      *  Name  . . . :  MQS1036R
      *  Text  . . . :  Web service, send Ship Confirmation / Pick In
      *  Author  . . :  Kevin Groninga
      *  Date  . . . :  11/11/2009
      *

*-------------------------------------------------------------------------
      *  Parameters
      *
      *  p1036iTmStamp - in  - record timestamp
      *  p1036oSuccess - out - count, success
      *  p1036oFailure - out - count, failure
      *  p1036oRsnCde  - out - reason code
      *

*-------------------------------------------------------------------------
      *  Modifications
      *
      *    Date     Pgmr       Project/Task
      *  mm/dd/yyyy <Pgmr>     <CMS Project Code>-(optional desc)
      *  This notation explains the modifications.
      *

*-------------------------------------------------------------------------

     H DFTACTGRP(*NO) BNDDIR('HTTPAPI':'QC2LE')

      *  ship confirmations / pick in messages
     Fpckshpz1  if   e           k disk

      *  web server profile
     Fwssrv     if   e           k disk

      *  options
     Foptions   if   e           k disk

      *  entry parameters
     D MQS1036R        PR                  ExtPgm('MQS1036R')
     D  p1036iTmStamp                  Z   const
     D  p1036oSuccess                 3  0
     D  p1036oFailure                 3  0
     D  p1036oRsnCde                256A

     D MQS1036R        PI
     D  p1036iTmStamp                  Z   const
     D  p1036oSuccess                 3  0
     D  p1036oFailure                 3  0
     D  p1036oRsnCde                256A

      /copy libhttp/qrpglesrc,httpapi_h

      *  incoming xml, start
     D StartOfElement  PR
     D   UserData                      *   value
     D   depth                       10I 0 value
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)

      *  incoming xml, end
     D EndOfElement    PR
     D   UserData                      *   value
     D   depth                       10I 0 value
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   value                    65535A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)

      *  incoming XML, response variables
     D incValue        s          32767A   varying
     D incReasonCode   s            256A   varying
     D incReasonCod1   s            256A   varying
     D incReasonCod2   s            256A   varying

      *  web service
     D SOAP            s          32766A   varying
     D rc              s             10I 0

      *  work
     D wksID           s                   like(srsid) inz(3)

     D wkqs#           s                   like(ctlqs#) inz(9106)

      *  web server, URL
     D srvServerURL    s            128
     D srvServiceURL   s            256
     D srvBindingURL   s            256

     D srvUsername     s             32
     D srvPassword     s             32

      *  web service SOAP, substitution variables
     D varXMLMsg       s          32767A   varying

      *  web service SOAP, response attribute counters
     D cntSuccess      s              3  0
     D cntFailure      s              3  0

      /free

       // if no parameters received, exit

       if ( %parms < 1 );
          return;
       endif;

       // reset output parms

       p1036oSuccess = 0;
       p1036oFailure = 0;
       p1036oRsnCde  = '';

       // load shipment confirmation / pick in XML message

       chain p1036iTmStamp pckshpz1;
       if %found(pckshpz1);
          varXMLMsg = shxmlmsg;
       endif;

       // load server URL, user, password

       chain wksID wssrv;
       if %found(wssrv);
          srvServerURL  = srsurl;
          srvUsername   = srusnm;
          srvPassword   = srpwd;
       endif;

       // load Web Service URL

       srvServiceURL = %trim(srvServerURL) +
                       '/CWDirectCPService/services/CWPickIn';

       // load Binding URL

       srvBindingURL = '';

       // reset incoming and response variables

       incValue       = '';
       incReasonCode  = '';
       incReasonCod1  = '';
       incReasonCod2  = '';

       cntSuccess     = 0;
       cntFailure     = 0;

       // Note:  http_debug(*ON/*OFF) can be used to turn debugging
       //        on and off.  When debugging is turned on, diagnostic
       //        info is written to an IFS file named
       //        /tmp/httpapi_debug.txt

       chain wkqs# options;
       if %found(options) and (ctlqst = 'Y');
         http_debug(*ON);
       endif;

       // Note:  http_XmlStripCRLF(*ON/*OFF) controls whether or not
       //        the XML parser removes CR and LF characters from the
       //        XML data that's passed to your 'Incoming' procedure.

       http_XmlStripCRLF(*ON);

       // load SOAP request statement with text expected by web service
       // - substitute variables for 'XML Message' info

       SOAP =
         '<?xml version="1.0" encoding="UTF-8"?>'
       + '<soapenv:Envelope'
       + ' xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";'
       + ' xmlns:dom="http://dom.w3c.org";>'

       + '<soapenv:Header/>'

       + '<soapenv:Body>'

       + '<dom:performAction>'

       + '<![CDATA['     //  <== Here's those pesky straight brackets

       + %trim(varXMLMsg)

       + ']]>'      //  <== Here's those pesky straight brackets

       + '</dom:performAction>'

       + '</soapenv:Body>'

       + '</soapenv:Envelope>';

       // post SOAP request to web service

       rc = http_url_post_xml(%trim(srvServiceURL)
                         : %addr(SOAP) + 2
                         : %len(SOAP)
                         : %paddr(StartOfElement)
                         : %paddr(EndOfElement)
                         : *NULL
                         : HTTP_TIMEOUT
                         : HTTP_USERAGENT
                         : 'text/xml;charset=UTF-8'
                         : %trim(srvBindingURL));

       // process web service response

       if (rc <> 1);

           // unexpected response code

           // commented out - if left in, when in batch mode, job ended
           //               - default failure count and reason code

           // http_crash();

               cntFailure    = cntFailure + 1;
               incReasonCode = 'NO CONNECT';

       endif;

       // if CWPickIn update successful,
       // - action as required

       if cntSuccess >= 1;

       endif;

       // if CWPickIn update failed,
       // - action as required

       if cntFailure >= 1;

       endif;

       // load output parameters

       p1036oSuccess = cntSuccess;
       p1036oFailure = cntFailure;
       p1036oRsnCde  = incReasonCode;

       // exit

       *inlr = *on;

      /end-free

      *--------------------------------------------------------------------
      *  Parse incoming XML response, start ... see EXAMPLE16
      *--------------------------------------------------------------------

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

      /free

      /end-free

     P                 E

      *--------------------------------------------------------------------
      *  Parse incoming XML response, end ... see EXAMPLE16
      *--------------------------------------------------------------------

     P EndOfElement    B
     D EndOfElement    PI
     D   UserData                      *   value
     D   depth                       10I 0 value
     D   name                      1024A   varying const
     D   path                     24576A   varying const
     D   value                    65535A   varying const
     D   attrs                         *   dim(32767)
     D                                     const options(*varsize)

      /free

            if name = 'Message';

               incValue = %trim(value);

               select;

                  when incValue = 'OK';

                     cntSuccess    = cntSuccess + 1;

                  other;

                     cntFailure    = cntFailure + 1;

                     incReasonCode = %trim(incValue);

                     if %scan('<Message':incValue) <> *zero;

                        incReasonCod1 = %trim(%subst(incValue:1:
                                        (%scan('<Message':incValue) - 1)));

                        incReasonCod2 = %trim(%subst(incValue:
                                        (%scan('</Message>':incValue) +
10)));

                        incReasonCode = %trim(incReasonCod1) + ' ' +
                                        %trim(incReasonCod2);

                     endif;

               endsl;

            endif;

      /end-free

     P                 E


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