This sample demonstrates a service for specifying the charge rates for calls through the use of business rules.
...
Code Block | ||
---|---|---|
| ||
<ruleService name="CallChargingService" xmlns="http://wso2.org/carbon/rules" targetNamespace="http://com.test/callcharging"> <ruleSet> <rule resourceType="regular" sourceType="inline"> <![CDATA[ package callcharging import samples.callcharging.CallLog; import samples.callcharging.CallCharge; rule "Local Call During Daytime" when callLog : CallLog( type == "local") eval((6 < callLog.now()) && (callLog.now()< 18)) then CallCharge c = new CallCharge(); c.setAmount(callLog.getPeriod() * 2); insertLogical(c); end rule "Local Call During Night" when callLog : CallLog( type == "local") eval((18 < callLog.now()) || (callLog.now()< 5)) then CallCharge c = new CallCharge(); c.setAmount(callLog.getPeriod() * 1); insertLogical(c); end rule "IDD Call During Daytime" when callLog : CallLog( type == "idd") eval((6 < callLog.now()) && (callLog.now()< 18)) then CallCharge c = new CallCharge(); c.setAmount(callLog.getPeriod() * 6); insertLogical(c); end rule "IDD Call During Night" when callLog : CallLog( type == "idd") eval((18 < callLog.now()) || (callLog.now()< 5)) then CallCharge c = new CallCharge(); c.setAmount(callLog.getPeriod() * 4); insertLogical(c); end ]]> </rule> </ruleSet> <operation name="charge"> <input wrapperElementName="callCharge" namespace="http://com.test/callCharge"> <fact elementName="callLog" namespace="http://com.test/callCharge" type="samples.callcharging.CallLog"></fact> </input> <output wrapperElementName="callChargeRespone" namespace="http://com.test/callCharge"> <fact elementName="callCharge" namespace="http://com.test/callCharge" type="samples.callcharging.CallCharge"></fact> </output> </operation> </ruleService> |
Executing the Sample
To execute the sample, run the ant
command from the <BRS<PRODUCT_Home>/samples/callcharging.service
directory to run the CallCharging Service.
Info |
---|
Before executing this sample, it is recommended that you refer Exposing Rules as Services which explains in detail the process of writing and deploying a business rule. |
Deploying and Testing the Service
- Deploy the rule service through the BRS management console. You can follow either of the two methods:
- Bundle all artifacts in an .aar file 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 .
- After deployment, click on List under Services in the main tab of the management console. The service will appear in the Deployed Services page.
- Click CallChargingService to access the dashboard of the service.
- Click Try this service in the Client Operations widget of the dashboard to invoke the Try-it tool.
Issue the following request in the Try the CallChargingservice window.
Code Block language html/xml <type>idd</type> <period>12</period>
You would get the following response:
Issue another request as follows:
Similarly, send another request:
Code Block language html/xml <type>local</type> <period>12</period>
Alternatively, you can use Generate Client 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 the Unpacks the data binding classes check box checked.Code Block language java package test.com.Client; import org.apache.axis2.AxisFault; import test.com.callcharge.CallCharge; import test.com.callcharge.CallChargeE; import test.com.callcharge.CallLog; import test.com.callcharging.CallChargingServiceStub; import java.rmi.RemoteException; public class CallChargingTestCase { public static void main(String[] args) { try { CallChargingServiceStub callChargingServiceStub = new CallChargingServiceStub("http://localhost:9763/services/CallChargingService"); CallChargeE callChargeRequest = new CallChargeE(); CallLog callLog = new CallLog(); callLog.setPeriod(200); callLog.setType("local"); CallLog[] callLogs = new CallLog[1]; callLogs[0] = callLog; callChargeRequest.setCallLog(callLogs); CallCharge[] callCharges = callChargingServiceStub.charge(callLogs); if(callCharges != null){ for (CallCharge callCharge : callCharges){ System.out.println("Tha charge for the call : " + callCharge.getAmount()); } } } catch (AxisFault axisFault) { axisFault.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } } }
Excerpt hidden true Call charging service sample of the WSO2 Business Rules Server samples guide.
...