Powered By Blogger

Feb 19, 2014


WSO2 ESB becomes fastest ESB in the Space !!!


WSO2 ESB 4.8.1 can be identified as the latest version of the ESB . When concerning the performance enhancements introduced in ESB 4.8.1,  it includes an enhanced PassThrough Transport (PPT), improves FastXSLT, and stabilizes streaming XPath. 

Below table and graph show the summary results of the performance test. This results indicate that WSO2 ESB 4.8.1 has continued to outperform all other number of leading open source ESBs including  Mule ESB 3.4.0, Talend-SE 5.3.1, and UltraESB 2.0.0.



You can find more details from the article - ESB Performance Round 7.5

Feb 15, 2014

Implementing a Data Service via WSO2 Developer Studio

This post describes the basic steps needed to implement a Data Service. As prerequisites you need to download and install WSO2 Developer Studio.

Scenario:

Let's assume you need to implement a simple login. In that case we are going to assume we have a MySQL database as follows with sample data.

Database name : TestUserDatabase
Table Name       : TestUser



  • Navigate to File -> New -> Maven Multi Module Project and click on Next.


  • Then provide relevant information and click Finish
  • Right click on the created project New -> Data Service Project and select option ' Create New Data Service' and click Next.
  • Then fill relevant information as below


  • In the next wizard, provide necessary data source configuration as listed below 

Database Engine: MySQL
Driver Class : com.mysql.jdbc.Driver
JDBC URL : jdbc:mysql://localhost:3306/TestUserDatabase
Username : [username according to MySQL credentials]
Password: [password according to MySQL credentials]



  • If you open the created UserData.dbs it will be displayed as below




  •  Now we want to add a select query to select the users in the TestUser table. Right click on the UserData and then select 'Add Query'
  • Then you can see a the query has been added as below
  • Now go to the properties window and add below information
  • Now right click on the added query and select 'Add Sql'
  • Then add below sql query in the window provided to insert SQL statement

  • Then we need to add input and output mapping, in order to do so right click on the query and select 'Add Input Mapping'
  • Then go to the properties window and add two params for UName and password as shown below, one after the other
  • Then right click on the query and then select 'Add Output Mapping' and go to the properties window and add following
  • Then right click on the created output mapping 'Users' and select  Add Output Mapping -> Add Element then add two elements for UName and password.


  • Finally we need to add an operation. Right click on the UserData and then select 'Add Operation' go to the properties window and add following
  • Then expand the created query 'GetUsers' and select call-query and in the properties window for the attribute 'href' give the query-id we have given for the select query (SelectUsers)
  • Then right click on the created call- query and select Add Input Mapping and go to the properties window and add following. This is the value that we are using for WHERE clause in the query. Since we need two values as UName and password, we have to add two input mappings

  • Final view would be as follows
  • Final configuration of the UserData.dbs is as follows

<data name="UserData" serviceGroup="UserData" serviceNamespace="org.user.com">
    <description/>
    <config id="test">
        <property name="org.wso2.ws.dataservice.user">root</property>
        <property name="org.wso2.ws.dataservice.password">root</property>
        <property name="org.wso2.ws.dataservice.protocol">jdbc:mysql://localhost:3306/TestUserDatabase</property>
        <property name="org.wso2.ws.dataservice.driver">com.mysql.jdbc.Driver</property>
    </config>
    <query id="SelectUsers" input-event-trigger="" output-event-trigger="" useConfig="test" keyColumns="">
        <sql dialect="">SELECT * FROM TestUser WHERE UName=? and password=?</sql>
        <param name="UName" ordinal="1" paramType="SCALAR" sqlType="STRING" type="IN"/>
        <param name="password" ordinal="2" paramType="SCALAR" sqlType="STRING" structType="" type="IN"/>
        <result defaultNamespace="" element="Users" rowName="user">
            <element column="UName" name="UName" xsdType="xs:string"/>
            <element column="password" name="password" xsdType="xs:string" query-param=""/>
        </result>
    </query>
    <operation name="GetUsers">
        <call-query href="SelectUsers">
            <with-param name="UName" query-param="UName"/>
            <with-param name="password" query-param=""/>
        </call-query>
    </operation>
</data>

Feb 10, 2014

Implementing a REST API to accpet JSON requests and to connect to a SOAP back end via WSO2 Developer Studio

In this blog post I am going to describe a scenario where a user can order books online from an online bookstore. For implementing, as prerequisites you need to download and install WSO2 products (Developer Studio, ESB, AS) and also below mentioned third party tools and libraries.
  • Apache ActiveMQ
    • activemq-broker-5.9.0.jar
    • activemq-client-5.9.0.jar
    • geronimo-j2ee-management_1.1_spec-1.0.1.jar
    • geronimo-jms_1.1_spec-1.1.1.jar
Main Processes

1. Configure Servers
2. Modeling Ordering Service
3. Modeling Request Process using REST API
4. Deploy the artifacts
5. Test the scenario

Configure Servers

WS02 ESB : 
  • Leave the offset parameter as it is to ‘0’. ($CARBON_HOME/repository/conf/carbon.xml)

  • Enable ESB to talk over a message queue by copying  the ActiveMQ libraries to the $ESB_HOME/repository/components/lib.
  • Enable the JMS transport on the ESB by uncommenting the following two sections in the ESB's configuration file.($ESB_HOME/repository/conf/axis2/axis2.xml)
<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">/transportReceiver>

AND

<transportSender name="jms"   class="org.apache.axis2.transport.jms.JMSSender"/>

WSO2 AS :

  • Set offset parameter to ‘2’.
  • To enable the Application Server to talk over a message queue follow the same step did for ESB previously.
  • To enable the JMS transport on the App Server follow the same step did for ESB previously.

Modeling Ordering Service


  • Go to Developer Studio dashboard and select Axis2service project. Then select option Create new Axis2 Service with the project name 'UserAxis2ServiceProject'

  • Then create a service called BookRequest. 




  • Then go to the source view and copy and paste the below code

public class BookRequest {



private String userID;

private String requestID;

private String bookName;
private String request;

public void setUserRequest(String userID, String requestID,
String bookName) {
this.userID = userID;
this.requestID = requestID;
this.bookName = bookName;
}

public String getUserRequest() {
return request;

}

}


  • Then right click on the created Axis2 Project and New-> Axis2 Service Class and then create a new Axis2 Class name ‘CreateBookRequest’. Then go to the source view and copy and paste the below code
public class CreateBookRequest { public Request createrequest(String userID, String requestID, String bookName) { BookRequest request = new BookRequest(); request.setUserRequest(userID, requestID, bookName); return request; } }




  • JMS transport should enable since this service will communicate via JMS transport, add the below code to services.xml under /src.main.resources/META-INF.  
<transports>

<transport>jms</transport>

</transports>


Modeling Request Process using REST API

  • Go to Developer Studio dashboard and then click on ESB Config project and select option create new ESB Config project with the name UserESB.
  • Then right click on that and select New-> REST API and then create a new REST API called 'UserAPI'


  • Then go to the source view and copy and paste the below code.

<api xmlns="http://ws.apache.org/ns/synapse" name="UserAPI" context="/users">
   
<resource methods="POST" uri-template="/request/json" inSequence="MakeRequestSequence">
        <outSequence/>
        <faultSequence/>
    </resource>
   
</api>







  • Then right click on the ESB project and select New -> Endpoint and create an endpoint named 'OrderingServiceEP '.  The source view should be like

<endpoint xmlns="http://ws.apache.org/ns/synapse" name="OrderingServiceEP">
    <address uri="jms:/CreateBookRequest?transport.jms.DestinationType=queue&amp;transport.jms.ContentTypeProperty=Content-Type&amp;java.naming.provider.url=tcp://localhost:61616&amp;java.naming.factory.initial=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;transport.jms.ConnectionFactoryJNDIName=QueueConnectionFactory"/>
</endpoint>




  • Then right click on the ESB project and select New -> Sequence and create a new sequence called MakeRequestSequence.

  • Go to the source view and copy paste the below code


<sequence xmlns="http://ws.apache.org/ns/synapse" name="MakeRequestSequence">

    <log level="full">
        <property name="text" value="** Customer Book Requesting Process **"/>
    </log>
    <property name="messageType" value="application/json" scope="axis2" type="STRING"/>
    <header name="To" scope="default" action="remove"/>
    <property name="UserID" expression="//jsonObject/request/title/userID/text()" scope="default" type="STRING"/>
    <property name="RequestID" expression="//jsonObject/request/title/requestID/text()" scope="default" type="STRING"/>
    <property name="BookName" expression="//jsonObject/request/title/bookName/text()" scope="default" type="STRING"/>
    
    <iterate xmlns:m="http://schemas.xmlsoap.org/soap/envelope/" continueParent="true" id="iter1" expression="//jsonObject/request/title">
        <target>
            <sequence>
                <property name="UserID" expression="//userID/text()" scope="default" type="STRING"/>
                <property name="RequestID" expression="//requestID/text()" scope="default" type="STRING"/>
                <property name="BookName" expression="//bookName/text()" scope="default" type="STRING"/>
            </sequence>
        </target>
    </iterate>

    <log level="custom" separator=",">
        <property name="MessageFlow" value="======================= Before Sending User Request to OrderingService : ======================="/>
    </log>
    <payloadFactory media-type="xml" description="">
        <format>
            <p:createrequest xmlns:p="http://customer.axis.org">
                <p:userID>$1</p:userID>
                <p:requestID>$2</p:requestID>
                <p:bookName>$3</p:bookName>
            </p:createrequest>
        </format>
        <args>
            <arg evaluator="xml" expression="//jsonObject/request/title/userID/text()"/>
            <arg evaluator="xml" expression="//jsonObject/request/title/requestID/text()"/>
            <arg evaluator="xml" expression="//jsonObject/request/title/bookName/text()"/>
        </args>
    </payloadFactory>
    <log level="custom">
        <property name="text" value="** User Request to be sent ........ **"/>
        <property name="UserID" expression="$ctx:UserID"/>
        <property name="RequestID" expression="$ctx:RequestID"/>
        <property name="BookName" expression="$ctx:BookName"/>
    </log>
    <log level="custom" separator=",">
        <property name="MessageFlow" value="======================= Sending Request To OrderingService======================="/>
    </log>
    <log level="full" separator=","/>
    <send>
        <endpoint key="OrderingServiceEP"/>
    </send>
</sequence>


  • If I explain the content of this sequence, first Property Mediators have been used to grab the request which comes as JSON 
eg: <property name="UserID" expression="//jsonObject/request/title/userID/text()" scope="default" type="STRING"/>

  • Then Iterator Mediator has been used to iterate throughout the message and extract relevant information 
eg:  <iterate xmlns:m="http://schemas.xmlsoap.org/soap/envelope/" continueParent="true" id="iter1" expression="//jsonObject/request/title">

        <target>
            <sequence>
                <property name="UserID" expression="//userID/text()" scope="default" type="STRING"/>
                <property name="RequestID" expression="//requestID/text()" scope="default" type="STRING"/>
                <property name="BookName" expression="//bookName/text()" scope="default" type="STRING"/>
            </sequence>
        </target>
    </iterate>

  • Then Payload Factory Mediator has been used in such away its payload matches with the format which back end service accepts requests. It's 'args' used to assign actual values got from the user request which can be assigned to variables in the format
eg: <payloadFactory media-type="xml" description="">
        <format>
            <p:createrequest xmlns:p="http://customer.axis.org">
                <p:userID>$1</p:userID>
                <p:requestID>$2</p:requestID>
                <p:bookName>$3</p:bookName>
            </p:createrequest>
        </format>
        <args>
            <arg evaluator="xml" expression="//jsonObject/request/title/userID/text()"/>
            <arg evaluator="xml" expression="//jsonObject/request/title/requestID/text()"/>
            <arg evaluator="xml" expression="//jsonObject/request/title/bookName/text()"/>
        </args>
    </payloadFactory>

  • The design of the sequence is as follows

Deploy the artifacts
  • Go to Developer Studio dashboard and select Composite Application Project and the give the name as 'UserCApp' and dependencies as stated below
    • UserAPI
    • UserAxis2ServiceProject
    • MakeRequestSequence
    • OrderingServiceEP

  • Then Right click on the UserCApp and select 'Export Composite Application Project' then give a name and destination. Now you have the .car file
  • Then start the WSO2 AS by navigate to $CARBON_HOME/bin and type the command wso2server.sh (Linux) or wso2server.bat (Windows)
  • Then deploy the created .car file on the server.
  • Then start WSO2 ESB and deploy the .car file
Test the scenario

  • Send the below REST CLIENT JSON Request


curl -i -H "Content-Type: application/json" -X POST -d '{"request" : {"title":{"userID":"2", "requestID":"200", "bookName": "HarryPotter"}}}' http://10.100.5.22:8280/userss/request/json

  • See the logs in ESB console

Feb 9, 2014

Use of WSO2 Enterprise Service Bus (ESB) Enrich Mediators for message mediation along with WSO2 Developer Studio


This post describes how we can use enrich mediators in a sequence, proxy or REST API for message mediation.

Basically this performs the process based on a given 'source' configuration and performs the action on that particular message using 'target' configuration. 

Following properties are available in source and target configuraiton

Source Configuration


  • Clone- By setting the clone configuration to 'True' or 'False' the message can be cloned or used as a reference during enriching.
  • Type- The type that the mediator uses from the original message to enrich the modified message that passes through the mediator.
  • Custom - Custom XPath value.
  • Envelope - Envelope of the original message used for enriching.
  • Body - Body of the original message used for enriching.
  • Property - Specifies a property.
  • Inline - Specifies an inline XML value.
  • XPath Expression


Target Configuration


  • Action- The relevant action can be applied to outgoing messages by specifying the action.
  • Replace - Replace is the default value of Action. It will be used if a specific value for Action is not given. This replaces the XML message based on the target type specified on the target configuration. 
  • Child - Adding as a child of the specified target type.
  • Sibling - Adding as a sibling of the specified target type.


Scenario
Let's assume that you are going to send a SOAP message through a proxy to the back end service. Lets assume you want to send CustomerID, RequestID, BookName and NoOfCopies to the proxy service and via that message you want to get a response from the back end service.

This is the soap message:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                              xmlns:heal="http://bookRequest.com">
                <soapenv:Body>
                    <heal:setRequest>
  <heal:customerID>123</heal:customerID>
<heal:requestID>100</heal:requestID>
                        <heal:bookName>Harry Potter</heal:bookName>
<heal:noOfCopies>3</heal:noOfCopies>
                    </heal:setRequest>
                </soapenv:Body>
</soapenv:Envelope>

Now we can use four Property Mediators to grab these SOAP message as follows.


            <property xmlns:heal="http://bookRequest.com" name="customerID" expression="//heal:setRequest/heal:customerID/text()" scope="default" type="STRING"/>

            <property xmlns:heal="http://bookRequest.com" name="requestID" expression="//heal:setRequest/heal:requestID/text()" scope="default" type="STRING"/>

            <property xmlns:heal="http://bookRequest.com" name="bookName" expression="//heal:setRequest/heal:movieName/text()" scope="default" type="STRING"/>

            <property xmlns:heal="http://bookRequest.com" name="noOfCopies" expression="//heal:setRequest/heal:noOfCopies/text()" scope="default" type="STRING"/> 

Then we can use four Enrich Mediators to grab this request, and another fifth Enrich Mediator to send this request to the back end service in a format where back end service accepts the request.
Lets assume this is the format which back end service accepts the request.

<body>
   <p:setCustomerRequest xmlns:p="http://bookRequest">
      <!--0 to 1 occurrence-->
      <xs:customerID xmlns:xs="http://bookRequest">?</xs:customerID>
      <!--0 to 1 occurrence-->
      <xs:requestID xmlns:xs="http://bookRequest">?</xs:requestID>
      <!--0 to 1 occurrence-->
      <xs:bookName xmlns:xs="http://bookRequest">?</xs:bookName>
      <!--0 to 1 occurrence-->
      <xs:noOfCopies xmlns:xs="http://bookRequest">?</xs:noOfCopies>
   </p:setCustomerRequest>

</body>

Then in the fifth Enrich Mediator we have to set the source to match with this format as below. We can set the target as 'body'
    <source type="inline" clone="true">
                    <p:setCustomerRequest xmlns:p="http://bookRequest">
                        <xs:customerID xmlns:xs="http://bookRequest">x</xs:customerID>
                        <xs:requestID xmlns:xs="http://bookRequest">y</xs:requestID>
                        <xs:bookName xmlns:xs="http://bookRequest">z</xs:bookName>
                        <xs:noOfCopies xmlns:xs="http://bookRequest">0</xs:noOfCopies>
                    </p:setCustomerRequest>
                </source>
                <target type="body"/>

            </enrich>

Now we can use four different Enrich Mediators to grab the SOAP request (source) and set those values in target in such a way to match with the source defined in the previous Enrich Mediator.

            <enrich>
                <source type="property" clone="true" property="customerID"/>
                <target xmlns:p="http://bookRequest" xpath="//p:setCustomerRequest/p:customerID/text()"/>
            </enrich>

            <enrich>
                <source type="property" clone="true" property="requestID"/>
                <target xmlns:p="http://bookRequest" xpath="//p:setCustomerRequest/p:requestID/text()"/>
            </enrich>

            <enrich>
                <source type="property" clone="true" property="bookName"/>
                <target xmlns:p="http://bookRequest" xpath="//p:setCustomerRequest/p:bookName/text()"/>
            </enrich>

            <enrich>
                <source type="property" clone="true" property="noOfCopies"/>
                <target xmlns:p="http://bookRequest" xpath="//p:setCustomerRequest/p:noOfCopies/text()"/>

            </enrich>

Here in these Enrich Mediators we have referred previously defined Property Mediators.

Feb 8, 2014

Service Integration with WSO2 Developer Studio, WSO2 Enterprise Service Bus (ESB) and WSO2 Application Server (AS)

With related to the previous post let's assume a customer wants to make the request about booking tickets online. For implementing, as prerequisites you need to download and install WSO2 products (Developer Studio, ESB, AS) and also below mentioned third party tools and libraries.

  • Apache ActiveMQ
      • activemq-broker-5.9.0.jar
      • activemq-client-5.9.0.jar
      • geronimo-j2ee-management_1.1_spec-1.0.1.jar
      • geronimo-jms_1.1_spec-1.1.1.jar
Main Processes

1. Configure Servers
2. Modeling Booking Service
3. Modeling Request Process
4. Deploy the artifacts
5. Test the scenario

Configure Servers


WS02 ESB : 

  • Leave the offset parameter as it is to ‘0’. ($CARBON_HOME/repository/conf/carbon.xml)

  • Enable ESB to talk over a message queue by copying  the ActiveMQ libraries to the $ESB_HOME/repository/components/lib.
  • Enable the JMS transport on the ESB by uncommenting the following two sections in the ESB's configuration file.($ESB_HOME/repository/conf/axis2/axis2.xml)
<transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">/transportReceiver>

AND

<transportSender name="jms"   class="org.apache.axis2.transport.jms.JMSSender"/>

WSO2 AS :

  • Set offset parameter to ‘2’.
  • To enable the Application Server to talk over a message queue follow the same step did for ESB previously.
  • To enable the JMS transport on the App Server follow the same step did for ESB previously.

Modeling Booking Service


  • Go to Developer Studio dashboard and select Axis2service project. Then select option Create new Axis2 Service.
  • Then create a service called Request.



  • Then go to the source view and copy and paste the below code.


public class Request {

private String customerID;
private String requestID;
private String movieName;
private int noOfSeats;
private String request;

public void setCustomerRequest(String customerID, String requestID,
String movieName, int noOfSeats) {
this.customerID = customerID;
this.requestID = requestID;
this.movieName = movieName;
this.noOfSeats = noOfSeats;
}

public String getCustomerRequest() {
return request;

}

}

  • Then right click on the created Axis2 Project and New-> Axis2 Service Class and then create a new Axis2 Class name ‘CreateRequest’. Then go to the source view and copy and paste the below code
public class CreateRequest { public Request createrequest(String customerID, String requestID, String movieName, int noOfSeats) { Request request = new Request(); request.setCustomerRequest(customerID, requestID, movieName, noOfSeats); return request; } }


  • JMS transport should enable since this service will communicate via JMS transport, add the below code to services.xml under /src.main.resources/META-INF.  
<transports>
<transport>jms</transport>
</transports>


 Modeling Request Process


  • Go to Developer Studio dashboard and then click on ESB Config project and select option create new ESB Config project with the name CustomerESB.
  • Then right click on that and select New-> Proxy Service and then create a new Proxy called 'ticketRequestProxy'
  • Then go to the source view and copy and paste the below code.



<proxy xmlns="http://ws.apache.org/ns/synapse" name="ticketRequestProxy" transports="http https" startOnLoad="true" trace="disable">
   <target>
        <inSequence>
            <log level="full">
                <property name="text" value="** User Ticket Request Process **"/>
            </log>
            <property xmlns:heal="http://ticketreservationRequest.wso2" name="customerID" expression="//heal:getUserRequest/heal:customerID/text()" scope="default" type="STRING"/>
            <property xmlns:heal="http://ticketreservationRequest.wso2" name="requestID" expression="//heal:getUserRequest/heal:requestID/text()" scope="default" type="STRING"/>
            <property xmlns:heal="http://ticketreservationRequest.wso2" name="movieName" expression="//heal:getUserRequest/heal:movieName/text()" scope="default" type="STRING"/>
            <property xmlns:heal="http://ticketreservationRequest.wso2" name="noOfSeats" expression="//heal:getUserRequest/heal:noOfSeats/text()" scope="default" type="STRING"/>
            <log level="custom" separator=",">
                <property name="movieName" expression="$ctx:movieName"/>
                <property name="noOfSeats" expression="$ctx:noOfSeats"/>
            </log>
            <log level="custom" separator=",">
                <property name="MessageFlow" value="======================= Before Sending User Request to RequestService : ======================="/>
            </log>
            <enrich>
                <source type="inline" clone="true">
                    <p:createrequest xmlns:p="http://axis.com">
                        <xs:customerID xmlns:xs="http://axis.com">x</xs:customerID>
                        <xs:requestID xmlns:xs="http://axis.com">y</xs:requestID>
                        <xs:movieName xmlns:xs="http://axis.com">z</xs:movieName>
                        <xs:noOfSeats xmlns:xs="http://axis.com">0</xs:noOfSeats>
                    </p:createrequest>
                </source>
                <target type="body"/>
            </enrich>
            <enrich>
                <source type="property" clone="true" property="customerID"/>
                <target xmlns:p="http://axis.com" xpath="//p:createrequest/p:customerID/text()"/>
            </enrich>
            <enrich>
                <source type="property" clone="true" property="requestID"/>
                <target xmlns:p="http://axis.com" xpath="//p:createrequest/p:requestID/text()"/>
            </enrich>
            <enrich>
                <source type="property" clone="true" property="movieName"/>
                <target xmlns:p="http://axis.com" xpath="//p:createrequest/p:movieName/text()"/>
            </enrich>
            <enrich>
                <source type="property" clone="true" property="noOfSeats"/>
                <target xmlns:p="http://axis.com" xpath="//p:createrequest/p:noOfSeats/text()"/>
            </enrich>
            <log level="custom" separator=",">
                <property name="MessageFlow" value="======================= Sending Request To RequestService======================="/>
            </log>
            <log level="full" separator=","/>
            <send receive="loginRequest">
                <endpoint key="SendRequest"/>
            </send>
        </inSequence>
        <outSequence>
            <log level="full" separator=","/>
            <send/>
        </outSequence>
        <faultSequence/>
    </target>
    <publishWSDL uri="http://192.168.1.2:9765/services/CreateRequest?wsdl"/>
</proxy>


  • The design of the proxy is as follows


Deploy the artifacts

  • Go to Developer Studio dashboard and select Composite Application Project and the give the name as 'CustomerCApp' and dependencies as stated below
    • ticketRequestProxy
    • CustomerAxis2ServiceProject

  • Then Right click on the CustomerCApp and select 'Export Composite Application Project' then give a name and destination. Now you have the .car file
  • Then start the WSO2 AS by navigate to $CARBON_HOME/bin and type the command wso2server.sh (Linux) or wso2server.bat (Windows)
  • Then deploy the created .car file on the server.
  • Then start WSO2 ESB and deploy the .car file
Test the scenario

  • Send the below soap request 

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                              xmlns:heal="http://ticketreservationRequest.wso2">
                <soapenv:Body>
                    <heal:getUserRequest>
  <heal:customerID>123</heal:customerID>
<heal:requestID>100</heal:requestID>
                        <heal:movieName>Harry Potter</heal:movieName>
<heal:noOfSeats>3</heal:noOfSeats>
                    </heal:getUserRequest>
                </soapenv:Body>
</soapenv:Envelope>


  • See the logs in ESB console