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