Versions Compared

Key

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

...

Info
titleNote

Before executing this sample, it is recommended that you refer to section Exposing Rules as Services which explains in detail the process of writing and deploying a business rule.

The 'GetQuote' Service Definition

Rules

Rule 1: If the customer has bronze status, then the item costs five dollars.

Rule 2 : If the customer has silver status, then the item costs four dollars.

Rule 3 : If the customer has gold status, then the item costs three dollars.

...

Rule Service Configuration (service.rsl)

Code Block
languagehtml/xml
<ruleService
        name="GetQuoteService"
        xmlns="http://wso2.org/carbon/rules"
        targetNamespace="http://com.test/quotation">
    <ruleSet>
        <rule resourceType="regular" sourceType="inline">
            <![CDATA[
                package quotation

                import samples.quotation.Customer;
                import samples.quotation.Quotation;

                rule "Gold Customer"
                when
                      Customer( status == "gold" )
                then
                      Quotation q = new Quotation();
                      q.setPrice(3);
                      insertLogical(q);
                end

                rule "Silver Customer"
                when
                      Customer( status == "silver" )
                then
                      Quotation q = new Quotation();
                      q.setPrice(4);
                      insertLogical(q);
                end

                rule "Bronze Customer"
                when
                      Customer( status == "bronze" )
                then
                      Quotation q = new Quotation();
                      q.setPrice(5);
                      insertLogical(q);
                end
            ]]>
        </rule>
    </ruleSet>
    <operation name="getQuote">
        <input wrapperElementName="placeCustomerDetail" namespace="http://com.test/placeCustomerDetail">
            <fact elementName="customerDetail" namespace="http://com.test/placeCustomerDetail" type="samples.quotation.Customer"></fact>
        </input>
        <output wrapperElementName="placeCustomerDetailRespone" namespace="http://com.test/placeCustomerDetail">
            <fact elementName="getQuotation" namespace="http://com.test/placeCustomerDetail" type="samples.quotation.Quotation"></fact>
        </output>
    </operation>
</ruleService>

Deploying and Testing the Rule Service

A 1. Deploy the rule service can be created either by creating through the BRS management console. You can follow either of the two methods:

  • Bundle all artifacts in an .aar file
or through the management console as discussed
  • and upload it (Rule Service -> Upload menu).
  • Create using the Rule Service wizard UI (Rule Service -> Create menu).

The above steps are discussed in detail in section Exposing Rules as Services.

Testing the Sample

...

2. After deployment, the service will appear in the "Deployed Services" window of the BRS management console. Access the service's dashboard by clicking on it.

3. In the "Client Operations" widget of the dashboard, invoke the Try-it tool

...

to test the service.

4. In the service's TryIt window, issue a request similar to the following.

Code Block
languagehtml/xml
<status>bronze</status>
Also5. Alternatively, you can use code generation, which is an option in the services dashboard link in the  "Client Operations" widget of the dashboard to invoke the service. A client using generated stub codes is shown below where the codes were generated with option "Unpacks the databinding classes".
Code Block
languagejava
package org.wso2.carbon.samples;

import org.apache.axis2.AxisFault;
import org.wso2.carbon.samples.quoteService.customerDetail.Customer;
import org.wso2.carbon.samples.quoteService.customerDetail.PlaceCustomerDetail;
import org.wso2.carbon.samples.quoteService.customerDetail.Quotation;
import org.wso2.carbon.samples.quoteService.stub.GetQuoteServiceStub;
import java.rmi.RemoteException;

public class GetQuoteServiceTestCase {

    public static void main(String[] args) {

        try {
            GetQuoteServiceStub getQuoteServiceStub = new GetQuoteServiceStub("http://localhost:9763/services/GetQuoteService");

            PlaceCustomerDetail placeCustomerDetail = new PlaceCustomerDetail();
            Customer customer = new Customer();
            customer.setStatus("gold");
            Customer[] customers = new Customer[1];
            customers[0] = customer;
            placeCustomerDetail.setCustomerDetail(customers);

            Quotation[] quotations = getQuoteServiceStub.getQuote(customers);
            int result = quotations[0].getPrice();
            System.out.println(result);
        } catch (AxisFault axisFault) {
            axisFault.printStackTrace();
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }
}
Excerpt
hiddentrue

GetQuote service sample of the WSO2 Business Rules Server samples guide.