CELSIUSDOM

This example program demonstrates the basic structure of an RPG program utilizing RPG-XML Suite to compose an XML request, call a remote web service, and parse the response XML with the DOM parser.

     H DEBUG(*YES) DFTACTGRP(*NO) BNDDIR('RXSBND') ACTGRP(*CALLER)
      /copy QRPGLECPY,RXSCB
      /copy QRPGLETPL,CELSIUS

     D Template        PR
     D  p                                  Like(RXS_TEMPLATE_PARM)


     D gData           S                   Like(RXS_Var1Kv_t)
     D gCelsius        S             10I 0
     D gFahrenheit     S             10I 0
     D gXmlRequest     S                   Like(RXS_Var64Kv_t)
     D gXmlResponse    S                   Like(RXS_Var64Kv_t)
     D gXPath          S                   Like(RXS_Var8Kv_t)


     D ComposeDS       DS                  LikeDS(RXS_ComposeDS_t)
     D TransmitDS      DS                  LikeDS(RXS_TransmitDS_t)
     D RootDomDS       DS                  LikeDS(RXS_ParseDOMDS_t)
     D ErrorDS         DS                  LikeDS(RXS_CatchThrowErrorDS_t)
      /free

       monitor;

         gFahrenheit = 100;

         exsr compose;

         exsr transmit;

         exsr parse;

         RXS_ResetDS( ErrorDS : RXS_DS_TYPE_CATCHTHROWERROR );
         ErrorDS.MessageId = 'RXS9897';
         ErrorDS.MessageData = 'Celsius Temp: '
           + %trim ( %editc( gCelsius : '3' ) + '°');
         ErrorDS.ThrowToCaller = RXS_YES;
         RXS_Throw( ErrorDS );
       on-error;

       endmon;

       *Inlr = *On;

       begsr compose;

         RXS_ResetDS( ComposeDS : RXS_DS_TYPE_COMPOSE );
         ComposeDS.TemplateProcedure = %Paddr( Template );
         RXS_StartComposeEngine( ComposeDS );
         RXS_ComposeVariable( fahrenheit : %Char(gFahrenheit) );
         RXS_ComposeSection( content );
         gXmlRequest =  RXS_GetComposeBuffer();
       
       endsr;

       begsr transmit;

         RXS_ResetDS( TransmitDS : RXS_DS_TYPE_TRANSMIT );
         TransmitDS.URI =
           'http://www.w3schools.com/xml/tempconvert.asmx';
         TransmitDS.HeaderSOAPAction =
           '"http://www.w3schools.com/xml/FahrenheitToCelsius"';
         TransmitDS.LogFile = '/tmp/celsius.txt';
         TransmitDS.HeaderContentType = 'text/xml; charset=utf-8';
         TransmitDS.RequestCcsid = RXS_CCSID_UTF8;
         gXmlResponse = RXS_Transmit( gXmlRequest : TransmitDS );
       
       endsr;

       begsr parse;

         RootDomDS = RXS_OpenDom( gXmlResponse );
         gXPath =
           RXS_XPath('/*:Envelope/*:Body/*:FahrenheitToCelsiusResponse' +
                     '/*:FahrenheitToCelsiusResult' );
         gData = RXS_ParseDomToText( gXPath : RootDomDS );
         RXS_CloseDom( RootDomDS );
         gCelsius = %Int( gData );
       
       endsr;
       
      /end-free
     P Template        B
     D                 PI
     D  p                                  Like(RXS_TEMPLATE_PARM)
        // Template RPG source was created from the actual template
        //  STMF using the following command:
        //     CRTRPGTPL STMF('/www/rxs/templates/geturi2.tpl')
        //       FILE(RXS3/QRPGLETPL) MBR(CELSIUS)
        // The RPG Template source is copied from QRPGLETPL by using
        //  /copy once in the D-specs and again below.
      /copy QRPGLETPL,CELSIUS
     P                 E