XML Event Builder
XML Event Builder converts the events/streams from an input adapter that supports XML input streams into an event stream that is compatible with the event processor. The event attributes are extracted using XPath expressions and converted to the type specified in the mapping before sent to the event processor.
You can configure through the management console as explained below or by manually adding an XML file as explained in step 5.
- Start the CEP, log in to its management console, select Event Streams and click In-Flows of the relevant stream.
- Enter details in the form that appears and click the Add Event Builder button at the end of the form. For example,
The fields in the above configuration are as follows:- Event Builder Name : Property to uniquely identify an event formatter configuration
- Input Event Adapter : The input event adapter used to publish events to the CEP. This drop-down list only displays the adapters that are already created. In this example, we select an Input HTTP Event Adapter, which is already created.
- Topic - The topic to which event publishers publish events to.
- Input Mapping Type : Select
xml
as the mapping type. This property changes based on the event adapter selected. It lists only the mapping types supported by a particular event adapter. - Advanced : Map the incoming events to the stream received by the event processor. Provide the necessary details in the input fields:
- Enter the xpath prefix and namespace in Prefix and Namespace under XPath prefixes
- Click Add under XPath prefixes to add the namespace and prefix.
Enter the Input Attribute Name , XPath and To Stream Data Type under 'Properties'
For the correct properties to show, you must select an event adapter that supports XML mapping type.
Here, If you not willing to add advanced mapping properties then xml event needs to be in a format which can accepted by the CEP. Sample xml event format accept by CEP is below. Corresponding stream definition which related to below sample event.
StreamDefinition{ streamId='loanRequestStream:1.0.0', name='loanRequestStream', version='1.0.0', nickName='loanRequest', description='Stream which contains events related to loan request', tags=null, metaData=[Attribute{name='tenant_id', type=INT}], correlationData=[Attribute{name='activity_id', type=STRING}], payloadData=[Attribute{name='clientPhoneNo', type=STRING}, Attribute{name='clientName', type=STRING}, Attribute{name='clientResidenceAddress', type=STRING}, Attribute{name='clientAccountNo', type=STRING}], }
<events> <event> <metaData> <tenant_id>2</tenant_id> </metaData> <correlationData> <activity_id>ID5</activity_id> </correlationData> <payloadData> <clientPhoneNo>0771117673</clientPhoneNo> <clientName>Mohanadarshan</clientName> <clientResidenceAddress>15, Alexendra road, California</clientResidenceAddress> <clientAccountNo>ACT5673</clientAccountNo> </payloadData> </event> </events>
- After a builder is successfully created, you can change its configuration and redeploy it. To do this, click the Edit link associated with it. You can also click the other links associated with it to delete or enable statistics and tracing.
- An XML based editor opens allowing you to edit the event builder configuration from the UI itself, without having to edit the file in the file system. Do your modifications and click Update.
Alternatively, you can specify an event builder configuration using an XML file and save it in
<PRODUCT_HOME>/repository/deployment/server/eventbuilders
directory, which is the event builder deployment directory. Since hot deployment is enabled, you can simply add/remove files to deploy/undeploy from the server.
Create the XML file with the following XML based event builder configurations. Event builder implementation must start with<eventbuilder>
root element and the namespace set tohttp://wso2.org/carbon/eventbuilder
as in the example below:<?xml version="1.0" encoding="UTF-8"?> <eventBuilder name="searchStatsXMLBuilder" statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventbuilder"> <from eventAdaptorName="httpInputAdaptor" eventAdaptorType="http"> <property name="topic">searchStatsTopic</property> </from> <mapping customMapping="enable" type="xml"> <property> <from xpath="ip"/> <to name="ip" type="string"/> </property> <property> <from xpath="username"/> <to name="username" type="string"/> </property> <property> <from xpath="searchKey"/> <to name="searchKey" type="string"/> </property> </mapping> <to streamName="searchStats" version="1.0.0"/> </eventBuilder>