IDENTIFICATION DIVISION. PROGRAM-ID. GETSTOCK. AUTHOR. RICH SMRCINA. INSTALLATION. VM ASSIST, INC. DATE-WRITTEN. DECEMBER, 2005. ***************************************************************** * THIS PROGRAM WILL CALL A WEB SERVICE TO GET A STOCK QUOTE * ***************************************************************** ENVIRONMENT DIVISION. DATA DIVISION. WORKING-STORAGE SECTION. 01 MISCELLANEOUS. 05 COMMAND-LINE. 10 FILLER PIC X(5) VALUE SPACES. 10 INPUT-SYMBOL PIC X(5) VALUE SPACES. 05 COMMAND-LENGTH PIC S9(4) COMP VALUE +10. 05 MESSAGE1-LENGTH PIC S9(4) COMP VALUE +35. 05 MESSAGE2-LENGTH PIC S9(4) COMP VALUE +18. 05 MESSAGE3-LENGTH PIC S9(4) COMP VALUE +281. 05 TS-QUEUE-LENGTH-OUT PIC S9(4) COMP VALUE +2000. 05 TS-QUEUE-LENGTH-IN PIC S9(4) COMP VALUE +45. 05 ENC-DEC-COMMAREA-LENGTH PIC S9(4) COMP VALUE +588. 05 COMMAND-RESPONSE PIC S9(8) COMP VALUE +0. 05 COMMAND-RESPONSE2 PIC S9(8) COMP VALUE +0. 01 MESSAGE1. 05 FILLER PIC X(21) VALUE 'The quote for symbol '. 05 MSG-SYMBOL PIC X(5) VALUE SPACES. 05 FILLER PIC X(4) VALUE ' is '. 05 MSG-VALUE PIC X(5) VALUE SPACES. 01 MESSAGE2. 05 FILLER PIC X(20) VALUE 'No symbol entered.'. 01 MESSAGE3. 05 FILLER PIC X(21) VALUE 'SOAP fault returned: '. 05 MSG3 PIC X(260). * SOAP Parameter TS-Queue data area. 01 SOAP-PARAM-HDR. 05 NAME PIC X(16) VALUE SPACES. 05 TYPENAME PIC X(16) VALUE SPACES. 05 PARAM-LENGTH PIC 9(8) COMP. 05 TYPECODE PIC 9(8) COMP. 05 PARAMETER. 10 PARAMETER-FIRST-FIVE PIC X(5). 10 FILLER PIC X(1995). * SOAP Encoder/Decoder COMMAREA. 01 SOAP-DEC-PARAM. 05 URL PIC X(128) VALUE SPACES. 05 METHOD PIC X(16) VALUE SPACES. 05 URN PIC X(128) VALUE SPACES. 05 INQUEUE. 10 CICS-TASKNUM-I PIC 9(7). 10 FILLER PIC X VALUE 'I'. 05 OUTQUEUE. 10 CICS-TASKNUM-O PIC 9(7). 10 FILLER PIC X VALUE 'O'. 05 FILLER PIC X(128) VALUE SPACES. 05 PROXYTYPE PIC 9(8) COMP VALUE 0. * des001 - add def's for Proxy Server and Proxy Port 05 PROXYSERVER PIC X(128) VALUE SPACES. 05 PROXYPORT PIC 9(8) COMP VALUE 0. 05 PROXYUSER PIC X(16) VALUE SPACES. 05 PROXYPASSWORD PIC X(16) VALUE SPACES. 05 RETCODE PIC 9(8) COMP VALUE 0. * soap action - optional - pass soap-Action value that * should be sent with soap request * add 256 to ENC-DEC-COMMAREA-LENGTH when sending these fields. 05 SOAPACTION PIC X(128) VALUE SPACES. 05 METHODLONG PIC X(128) VALUE SPACES. PROCEDURE DIVISION. 0000-MAINLINE. * Get Stock symbol from the transaction invocation. EXEC CICS RECEIVE INTO (COMMAND-LINE) LENGTH(COMMAND-LENGTH) END-EXEC. IF INPUT-SYMBOL = SPACES OR INPUT-SYMBOL = LOW-VALUES PERFORM 0100-WRITE-ERRMSG THRU 0100-EXIT GO TO 0000-DONE. * Fill in the parameter information. MOVE INPUT-SYMBOL TO MSG-SYMBOL, PARAMETER. MOVE 'symbol' TO NAME. MOVE 'string' TO TYPENAME. MOVE 10 TO TYPECODE. * Determine symbol length COMPUTE PARAM-LENGTH = ( COMMAND-LENGTH - 5 ) + 40 * Set up the queue names and write out the parameter. MOVE EIBTASKN TO CICS-TASKNUM-O, CICS-TASKNUM-I. EXEC CICS WRITEQ TS QUEUE(INQUEUE) FROM(SOAP-PARAM-HDR) LENGTH(TS-QUEUE-LENGTH-IN) RESP(COMMAND-RESPONSE) END-EXEC. IF COMMAND-RESPONSE NOT EQUAL DFHRESP(NORMAL) MOVE 'WRITEQ ERROR' TO MESSAGE2 PERFORM 0100-WRITE-ERRMSG THRU 0100-EXIT GO TO 0000-DONE. * Clear out SOAP-PARAM-HDR for the response. MOVE SPACES TO SOAP-PARAM-HDR. * Set up encoder/decoder commarea. MOVE 'http://64.124.140.30:80/soap' TO URL. MOVE 'getQuote' TO METHOD. MOVE 'urn:xmethods-delayed-quotes' TO URN. * Set up Proxy Server Type, URL, and Port MOVE 1 TO PROXYTYPE. MOVE '157.145.216.9' TO PROXYSERVER. MOVE 9119 TO PROXYPORT. * Call the encoder. EXEC CICS LINK PROGRAM('IESSOAPE') LENGTH(ENC-DEC-COMMAREA-LENGTH) COMMAREA(SOAP-DEC-PARAM) RESP(COMMAND-RESPONSE) RESP2(COMMAND-RESPONSE2) END-EXEC. * Retrieve the SOAP Service response from TS. EXEC CICS READQ TS QUEUE(OUTQUEUE) INTO(SOAP-PARAM-HDR) LENGTH(TS-QUEUE-LENGTH-OUT) RESP(COMMAND-RESPONSE) END-EXEC. IF COMMAND-RESPONSE NOT EQUAL DFHRESP(NORMAL) MOVE 'READQ ERROR' TO MESSAGE2 PERFORM 0100-WRITE-ERRMSG THRU 0100-EXIT GO TO 0000-DONE. * Delete the temporary storage queues. EXEC CICS DELETEQ TS QUEUE(INQUEUE) END-EXEC. EXEC CICS DELETEQ TS QUEUE(OUTQUEUE) END-EXEC. * Check for a SOAP fault. IF PARAMETER-FIRST-FIVE EQUAL 'fault' THEN MOVE PARAMETER TO MSG3 EXEC CICS SEND TEXT ERASE FROM(MESSAGE3) LENGTH(MESSAGE3-LENGTH) END-EXEC GO TO 0000-DONE. * Move the response to the message output area and display it. MOVE PARAMETER TO MSG-VALUE. EXEC CICS SEND TEXT ERASE FROM(MESSAGE1) LENGTH(MESSAGE1-LENGTH) END-EXEC. 0000-DONE. EXEC CICS RETURN END-EXEC. 0000-EXIT. * 0100-WRITE-ERRMSG. EXEC CICS SEND TEXT ERASE FROM(MESSAGE2) LENGTH(MESSAGE2-LENGTH) END-EXEC. 0100-EXIT. * GOBACK.