Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

In the ESB profile of WSO2 Enterprise Integrator (WSO2 EI), this This scenario is commonly referred to as Service Chaining. Here, where several services are integrated based on some business logic and exposed as a single , aggregated aggregated service. 

Panel

In this tutorial, you send a message through the ESB profile to the back-end service using the /wiki/spaces/EI6xx/pages/49612850 Call mediator, instead of the Send mediator. Using the Call mediator, you You can build a service chaining scenario with the Call mediator as it allows you to specify all service invocations one after the other within a single sequence.

You then use the /wiki/spaces/EI6xx/pages/49612834 to take the response the PayloadFactory mediator to take the response from one back-end service and change it to the format that is accepted by the other back-end service.

Note

See the following topics for a description descriptions of the concepts that you need to know when creating ESB artifacts:

Tip

Tip

Before you begin,

  • Install Oracle Java SE Development Kit (JDK) version 1.8.* and set the JAVA_HOME environment variable.
    • Download the product installer from here, and run the installer.
      Insert excerpt
    EI6xx:
    • Installing the Product
    EI6xx:
    • Installing the Product
      nopaneltrue
    • Select

    and download
    • the relevant WSO2 Integration Studio

    ZIP file
    • based on your operating

    system from here and then extract the ZIP file. 
    • system and download it from here.
      The path to this folder

    will be
    • is referred to as <EI_TOOLING> throughout this tutorial.

    note
    • Info

      Getting an error message? See the troubleshooting tips given under

    /wiki/spaces/EI6xx/pages/49612293 the  open then click 
      1. click Import.
      2. Next, expand the WSO2 category and select Existing WSO2 Projects into workspace
     under the WSO2 category
      1. , click Next, and upload
    the pre-packaged project. This contains the configurations of the Transforming Message Content tutorial so that you do not have to repeat those steps
      1. the project file.

    Let's get started!

    Table of Contents

    ...

    Let's create HTTP endpoints to representing the back-end services that to which you need to connect, in order to check the channelling fee and to settle the payment. These services process information related to channelling fees and payment settlements.

    Anchor
    ChannelingFeeEP
    ChannelingFeeEP

    1. Right click SampleServices in the Project Explorer and navigate to New -> Endpoint. Ensure Create a New Endpoint is selected and click Next.

    2. Fill in the following information as in the following table:

      FieldValue
      Endpoint NameChannelingFeeEP
      Endpoint TypeHTTP Endpoint
      URI Templatehttp://localhost:9090/{uri.var.hospital}/categories/appointments/{uri.var.appointment_id}/fee
      MethodGET
      Static Endpoint(Select this option because we are going to use this endpoint in this ESB Config project only and will not re-use reuse it in other projects.)
      Save Endpoint inSampleServices
    3. Click Finish.

    4. Anchor
      SettlePaymentEP
      SettlePaymentEP

      Create another endpoint for the Settle Payment service and fill in the information as in the following table: 

      FieldValue
      Endpoint NameSettlePaymentEP
      Endpoint TypeHTTP Endpoint
      URI Template

      http://localhost:9090/healthcare/payments

      MethodPOST
      Static Endpoint(Select this option because we are going to use this endpoint in this ESB Config project only and will not re-use it in other projects.)
      Save Endpoint inSampleServices
    5. Click Finish.

    ...

    1. In WSO2 Integration Studio, add a Property mediator just after the Get Hospital Property mediator in the in-In sequence of the API resource to retrieve and store . This is used for retrieving and storing the card number that is sent in the request payload.

       

      With the Property mediator selected, access the Properties tab and fill in the information as in the following table:

      FieldValue
      Property NameSelect New Property
      New Property Namecard_number
      Property Action

      Select set

      Value TypeSelect Expression
      Value Expressionjson-eval($.cardNo)
      DescriptionGet Card Number
      Tip

      For detailed instructions on adding a Property mediator, see Mediating requests to the back-end service.

    2. Go to the first case box of the Switch mediator. Add a Property mediator just after the Log mediator to store the value for the uri.var.hospital variable value that will be used when sending requests to ChannelingFeeEP.
       

      With the Property mediator selected, access the Properties tab and fill in the information as in the following table:

      FieldValue
      Property NameSelect New Property
      New Property Nameuri.var.hospital
      Property Action

      Select set

      Value TypeSelect LITERAL
      Property Data TypeSelect STRING
      Valuegrandoaks
      DescriptionSet Hospital Variable
    3. Similarly, add property Property mediators in the other two case boxes in the Switch mediator. Change only the Value field as follows:
      • Case 2: clemency
      • Case 3: pinevalley
    4. Delete the Send mediator by right-clicking on the mediator and selecting Delete from Model. Replace this with a Call mediator from the Mediators palette and add GrandOakEP from the Defined Endpoints palette to the empty box adjoining the Call mediator. 

      Replace the Send mediators in the following two case boxes as well and add ClemencyEP and PineValleyEP to the respective boxes adjoining the Call mediators.

      Info

      Replacing with a Call mediator allows us to define other service invocations following this mediator.

      Let's use Property mediators to retrieve and store the values that you get from the response you receive from GrandOakEP, ClemencyEP, or PineValleyEP.

    5. Next to the Switch mediator, add a Property mediator to retrieve and store the value sent as appointmentNumber.

       

      With the Property mediator selected, access the Properties tab and fill in the information as in the following table:

      FieldValue
      Property NameSelect New Property
      New Property Nameuri.var.appointment_id
      (This value is used when invoking ChannelingFeeEP)
      Property Action

      Select set

      Value TypeSelect EXPRESSION
      Value Expressionjson-eval($.appointmentNumber)
      DescriptionGet Appointment Number
      Note

      You derive the Value Expression in the above table from the following response that is received from GrandOakEP, ClemencyEP, or PineValleyEP:

      Code Block
      {"appointmentNumber":1,   "doctor":
              {"name":"thomas collins",
               "hospital":"grand oak community hospital",
               "category":"surgery","availability":"9.00 a.m - 11.00 a.m",
               "fee":7000.0},
         "patient":
             {"name":"John Doe",
              "dob":"1990-03-19",
              "ssn":"234-23-525",
              "address":"California",
              "phone":"8770586755",
              "email":"johndoe@gmail.com"},
         "fee":7000.0,
         "confirmed":false}
    6. Similarly, add two more Property mediators as follows. They retrieve and store the doctor details and patient details respectively , from the response that is received from GrandOakEP, ClemencyEP, or PineValleyEP.

      FieldValue
      Property NameSelect New Property
      New Property Namedoctor_details
      Property Action

      Select set

      Value TypeSelect EXPRESSION
      Value Expressionjson-eval($.doctor)
      DescriptionGet Doctor Details
      FieldValue
      Property NameSelect New Property
      New Property Namepatient_details
      Property ActionSelect set
      Value TypeSelect EXPRESSION
      Value Expressionjson-eval($.patient)
      DescriptionGet Patient Details

    7. Add a Call mediator and add ChannelingFeeEP from Defined Endpoints palette to the empty box adjoining the Call mediator. 
    8. Add a Property mediator adjoining the Call mediator box to retrieve and store the value sent as actualFee. Access the Property tab of the mediator and fill in the information as in the following table:

      FieldValue
      Property NameSelect New Property
      New Property Nameactual_fee (This value is used when invoking SettlePaymentEP )
      Property Action

      Select set

      Value TypeSelect EXPRESSION
      Value Expressionjson-eval($.actualFee)
      DescriptionGet Actual Fee

      Note

      You derive the Value Expression in the above table from the following response that is received from ChannelingFeeEP:

      Code Block
      {"patientName":" John Doe ", 
       "doctorName":"thomas collins", 
       "actualFee":"7000.0"}

      Let's use the /wiki/spaces/EI6xx/pages/49612834 to construct the following message payload for the request sent to SettlePaymentEP. 

      Code Block
      {"appointmentNumber":2,
      	"doctor":{
      		"name":"thomas collins",
      		"hospital":"grand oak community hospital",
      		"category":"surgery",
      		"availability":"9.00 a.m - 11.00 a.m",
      		"Fee":7000.0
      	},
      	"patient":{
      		"name":"John Doe",
      		"Dob":"1990-03-19",
      		"ssn":"234-23-525",
      		"address":"California",
      		"phone":"8770586755",
      		"email":"johndoe@gmail.com"
      	},
      	"fee":7000.0,
      	"Confirmed":false,
          "card_number":"1234567890"
      }
    9. Add a PayloadFactory mediator next to the Property mediator, from the mediators palette to construct the above message payload. 

       

      With the Payloadfactory mediator selected, access the properties tab of the mediator and fill in the information as in the following table:

      FieldValueDescription
      Payload FormatSelect Inline-
      Media Type

      Select json

      -
      Payload
      Code Block
      {
      "appointmentNumber":$1,
      "doctor":$2,
      "patient":$3,
      "fee":$4,
      "confirmed":"false",
      "card_number":"$5"
      }
      The message payload to send with the request to SettlePaymentEP. In this payload, $1, $2, $3, $4, and $5 indicate variables.

      We will look at adding the value for the field Args in the following steps.

      Tip

      To avoid getting an error message, first select the Media Type before providing the Payload.

    10. To add the Args field for the PayloadFactory mediator, click the Add (+) icon in the Args field and enter the following information as in the table below. It provides the argument that defines the actual value of the first variable used in the format definition in the previous step.

      FieldValueDescription
      TypeSelect Expression-
      Value

      $ctx:uri.var.appointment_id

      The value for the first variable ($1) in the message payload format.
      Evaluator

      Select xml

      Indicates that the expression provided is in XML.
      Info

      The $ctx method is similar to using the get-property method. This method checks in the message context. For more details on using this method, refer the documentation.

    11. Similarly, click Add and add more arguments to define the other variables that are used in the message payload format definition. Use the following as the Value for each of them: 

      $ctx:doctor_details
      $ctx:patient_details
      $ctx:actual_fee
      $ctx:card_number

    12. Add a Call mediator and add SettlePaymentEP from Defined Endpoints palette to the empty box adjoining the Call mediator.
    13. Add a /wiki/spaces/EI6xx/pages/49616625 mediator to send the response to the client. 
      You should now have a completed configuration that looks like this:
    14. Save the updated REST API configuration.

    ...