Restriction: This topic applies to Windows environments only.
In this tutorial, you use the top-down method to create a CICS Web service provider application that receives a character
string in the form of a JSON request. The application reverses the string, and sends the reversed string back to the requester
as a JSON response message.
To use the top-down method to create a CICS Web service provider, you start with request and response JSON that describes
request and response data structures. From the JSON, you generate a skeleton CICS COBOL provider application, and a WSBIND
file that provides mapping between the JSON and the COBOL data structures.
The
sample
project used in this tutorial to create your
Enterprise Developer
for Eclipse project contains the
reverse.json schema, which describes both the request and response data structures.
Prerequisites
If you have not done so already, you must install the IBM-37, IBM-437, and 002501B5 CCSID tables before attempting this tutorial.
See
To install CCSID tables for instructions.
To complete the
Test the ReverseJSON Web service provider section of this tutorial, we recommend that you install a JSON requester tool.
This tutorial assumes that your
Enterprise Developer project is set to
Build Automatically. If not, turn this feature on by clicking
Project > Build Automatically from the main menu.
Import the ReverseJSON project
- In Eclipse, start the Team Developer Application Explorer.
- From the main menu, click
File > Import.
- Expand
General, and select
Existing Projects into Workspace; then click
Next.
- Select
Set root directory, then browse to the
%PUBLIC%\Documents\Micro Focus\Enterprise Developer\Samples\Mainframe\CICS\Classic\CWS\JSON\Provider\TopDown directory; then click
Select Folder.
- On the
Projects list, ensure that
ReverseJSON is checked.
- Under
Options, check
Copy projects into workspace; then click
Finish.
The Application Explorer now shows the
ReverseJSON project, which is created in a
ReverseJSON subdirectory of your current Eclipse workspace, and is built automatically.
Generate CICS Web Service provider components
Use the
New CICS Web Service wizard to generate the components of your Web service provider.
- From the Application Explorer, click the
ReverseJSON project to select it.
- Click
File > New > CICS Web Service. This starts the
New CICS Web Service Wizard.
Note: If
CICS Web Service is not listed:
- Select
Other.
- Expand
Micro Focus Service Interface.
- Select
CICS Web Service; then click
Next.
- Under
Service type, select
JSON message processing.
- From the drop-down list, select
CICS Web Service Provider (Top-Down, Request-Response); then click
Next.
The Project field is already populated with the name of the current project,
ReverseJSON.
- Click the
Browse button that corresponds to the
JSON request field.
- Navigate to and select the
reverse.json file, located in your project's
schema folder.
- Click the
Browse button that corresponds to the
JSON response field.
- Navigate to and select the
reverse.json file, located in your project's
schema folder.
You need to provide a URI that
Enterprise Server can use to identify and locate the appropriate Web service upon receiving a request or a response. This information goes
into the
Service location field.
- In the
Service location field, type
/cics/services/json/reverse.
- Select
CHANNEL from the
Program interface drop-down list.
The default container name is
DFHWS-DATA, which is the top-level container used in service provider applications for CICS Web services.
- Click
Next.
- In the
Output artifacts group, type
reverseJ into the
Program name field. This is the name of the generated COBOL skeleton program.
The file prefixes you supply for the
Request file prefix and
Response file prefix fields become the first part of the filenames of the generated copybooks that support the generated skeleton program file;
one for request data structures, and one for response data structures.
- In the
Request file prefix field, type
REQ.
- In the
Response file prefix field, type
RESP.
Enterprise Developer generates a WSBIND file that maps the JSON request to the data structure in the generated request copybook and maps the JSON
response to the data structure in the generated response copybook. You need to provide a folder and filename for this file.
- Click the
Browse button that corresponds to the
WSBIND file field.
- On the Browse for WSBIND file dialog, click
New folder.
- In the field for the folder name, overwrite
New folder with
loadlib; then press
Enter.
- Double-click the
loadlib folder.
- In the
File name field, type
ReverseJ; then click
Open.
- Click
Finish.
Enterprise Developer generates the following CICS Web service components:
- reverseJ.cbl
- A skeleton CICS program.
- reverseJ.svi
- A service interface file.
- REQ01.CPY
- A copybook containing the COBOL data structures required to send a JSON request as input. This file is generated but does
not appear in the Solution Explorer.
- RESP01.CPY
- A copybook containing the COBOL data structures required to receive a JSON response message as output.
Implement the service
The generated skeleton program,
reverseJ.cbl, contains some basic functionality that is common to any CICS Web service that uses the Channel interface. The Web service:
- Populates the request data structure (in
REQ01.CPY) with the content of the DFHWS-DATA container.
- Populates the DFHWS-DATA container with the content of the response data structure (in
RESP01.CPY).
To provide the required operation logic, you must code it manually by editing the program.
- From the
Application Explorer, double-click
reverseJ.cbl to open it in the COBOL editor.
- Declare the following two variables in the
Working-Storage section:
01 ws-string-len pic x(4) comp-5.
01 ws-reversedString-len pic x(4) comp-5.
The provided
revLogicJ.cpy copybook contains one PERFORM statement that populates the request and response data structures. You need to include the
copybook in the program and execute the PERFORM statement.
- reverseJ.cbl contains two comment lines between the
EXEC CICS GET and the
EXEC CICS PUT statements. Code the following PERFORM statement between the comment lines:
perform reverse-logic
- Scroll down to the
bottom of the program, and add the following
copy statement after the
exit program statement:
copy 'revLogicJ.cpy'.
- Click
File > Save.
- Close the COBOL editor.
Eclipse automatically builds the project to include your changes.
Create an
enterprise server region
Here you use
Enterprise Server to create an
enterprise server region on which to run the Web service.
- In
Enterprise Developer, activate the Server Explorer.
Note: If Server Explorer is not showing, click
Window > Show View > Other > Micro Focus > Server Explorer.
- Right-click
Local [localhost:86]; then select
New > Enterprise Server.
- In the
Name field, type
JSONPROV. This is the name for the new
enterprise server region.
- Click the
Browse button that corresponds to the
Template field, and navigate to the
CICSWebServicesTemplate.xml file located in the
ReverseJSON project folder.
- Double-click
CICSWebServicesTemplate.xml. This populates the
Template field.
- On the list next to
Associate with projects, check
ReverseJSON.
- Click
Finish.
The Server Explorer should now show the
JSONPROV
enterprise server region listed under
Local [localhost:86].
Note: If
JSONPROV is not showing, expand
Local [localhost:86].
Configure
JSONPROV resources
All
enterprise server regions require access to certain resources, depending on the types of applications they run. Resources that are defined on a region's
startup list are loaded during the startup routine, making them available for as long as the region is running.
JSON CICS Web services use the underlying resources provided by the standard
Enterprise Server CICS Web interface (CWI) and CICS Web Services (CWS) support. However, the resource definition file supplied with the project
does not include these resources; therefore, you need to add them manually. The CWI resources reside in a predefined resource
group named DFHWEB. The CWS resources are in the predefined DFHPIPE group.
In addition, you need to create and define a resource group,
JSONPROV, to contain the resources required by the
reverseJ program.
- Start
Enterprise Server Administration
-
- From Server Explorer, right-click
Local [localhost:86]; then select
Open Administration Page. This starts
Enterprise Server Administration.
On the Home page, you should see the
JSONPROV
enterprise server region listed.
- Back on the Server Explorer, right-click
JSONPROV; then select
Start.
As the region is starting, the
Enterprise Server Administration Home page should show log information in the region's
Status Log column. When the region is fully started, this is indicated in the region's
Status column.
Note: If this is the first time you have started the server you see a sign-on dialog box. If
Server is secured is checked, uncheck it; then click
OK. Unchecking
Server is secured prevents this dialog box from showing when you subsequently start the region. If
Server is secured is not checked, simply click
OK to clear the dialog box. If a Secure Storage prompt appears, click
No.
- Start ES Monitor and Control (ESMAC)
-
- After
JSONPROV has started, on the Administration Home page, click the
Details button located in the
Status column for the
JSONPROV region.
- On the
Server > Control page, click
ES Monitor & Control. This starts the ESMAC utility where you can edit the startup list.
- Open the DEMOSTRT startup list
-
- On the ESMAC menu, click the drop-down list located under
Resources; then select
by Group.
- Click
Startup. This invokes a list of
CICS Startup Lists in the right pane.
The
JSONPROV region uses the default startup list, named DEMOSTRT.
- Click the
Details button that corresponds to
DEMOSTRT. This takes you to the CICS STARTUP - DEMOSTRT page.
- Add resource groups
- CICS Web Services are built on top of the CICS Web Interface (CWI) support, so you need to ensure that all CWS and CWI resources
are available. These reside in the DFHPIPE and DFHWEB resource groups respectively, which are already defined, but not included
in the startup list. Here you add these resource groups to the startup list.
- In addition, you need to add a new resource group for the CICS provider resources named
JSONPROV. At this point, the
JSONPROV resource group is neither created nor defined. Those tasks are completed in the next few sections of this tutorial.
- On the CICS STARTUP - DEMOSTRT page, scroll down to the end of the list and type
DFHWEB into the empty field at the bottom; then click
Apply. ESMAC adds the DFHWEB group, and adds another empty field at the end of the list.
- In the new empty field, type
DFHPIPE; then click
Apply.
- In the new empty field, type
JSONPROV; then click
Apply.
- Create the
JSONPROV resource group
-
- On the ESMAC menu, click the
Groups button located under
Resources.
- On the CICS Resource Groups page, click
New.
- In the
Name field, type
JSONPROV.
- In the
Description field, type
CICS Web Services Provider Resources; then click
Add. This invokes the CICS Group
JSONPROV page where you can create and define resources for the group.
- Define
JSONPROV resources
- The
reverseJ program requires a resource for TCP/IP service, and a resource to support a pipeline.
- On the CICS Group
JSONPROV page, click
TCPIPSv.
- Complete these fields:
Name
|
CWSTCPIP
|
Description
|
My TCP/IP Service
|
Port No
|
5482
|
- Click
Add.
Enterprise Server returns
Add successful.
- Click
Apply.
Enterprise Server returns
Update successful.
- Click
Group List to return to the CICS Group
JSONPROV page.
- Click
Pipeline.
- Complete these fields:
Name
|
JSONPIPE
|
|
Description
|
My CICS JSON Provider Pipeline
|
|
Resp Wait
|
DEFT
|
This is the number of seconds that an application waits for a response from the service. DEFT indicates the default value,
which is 10 seconds for HTTP and 60 seconds for MQ.
|
Config file
|
$IDE_XML_LOC\JSONConfig.xml
|
The IDE_XML_LOC environment variable in
JSONPROV points to the
xml project folder.1
|
WebSvc Dir
|
$IDE_LOADLIB\
|
The IDE_LOADLIB environment variable points to the
loadlib project folder, which contains the WSBIND file.1
|
1 To see a list of environment variables defined for
JSONPROV, from the ESMAC menu, click
Env.Vars..
|
- Click
Add.
Enterprise Server returns
Add successful.
- Click
Apply.
Enterprise Server returns
Update successful.
- Click
Home to return to the Administration Home page.
You can install the new resources by stopping and starting the region.
- From the
Enterprise Developer Server Explorer, right-click
JSONPROV; then select
Restart. This stops and then starts the
JSONPROV
enterprise server region, automatically installing and loading the newly added resources on the startup list.
Verify Resources
After
JSONPROV is started, you can verify that the resources you have defined are installed and active.
- In
Enterprise Server, start ESMAC for the
JSONPROV region.
- On the ESMAC menu, select
Active from the drop-down list located under
Resources.
- On the ESMAC menu, click the
WebSvc button. You should see the
ReverseJ Web service listed and marked as
INSERVICE.
- On the ESMAC menu, click
Pipeline; then click the
Details button that corresponds to
JSONPIPE. The Pipeline resource sets the response wait period, identifies the JSON configuration file, and the Web Service directory.
- On the ESMAC menu, click
URIMAP; then click the
Details button that corresponds to
PIPELINE and
/cics/services/json/reverse.
Enterprise Server generates URIMAPs to provide CICS with the information it needs to process requests. The name of each generated URIMAP begins
with a pounds sterling symbol (£).
To run your provider CICS Web service, you send a JSON request to an endpoint URL that routes the request to your
enterprise server region. The endpoint URL contains a URI value. The incoming request reads the installed URIMAPs to identify the map whose
Path value matches the
URI value of the endpoint URL. When the correct URIMAP is identified, CICS uses the data defined in the URIMAP, such as the name
of the
Web Service and its associated
Pipeline, to process the request.
Test the ReverseJSON Web service provider
Now that you have your Web service provider running with all of its resources active, you are ready to send a JSON request
to run the Web service. You can do this using any JSON requester tool.
- Create a JSON request with the following endpoint URL:
http://localhost:5482/cics/services/json/reverse
- Set the Method to POST.
- Enter the following JSON request:
{"myStrings":["olleH"]}
You should receive the following JSON response:
{"myStrings":[ "Hello" ]}