|
|
Message Explosion Example
This section illustrates a message explosion process. In this example, you need to take an input FML buffer containing a single city name and a variable number of state names and "explode" the buffer into the multiple buffers. Each of these buffers is an FML buffer containing one city name and one state name. These buffers will then be enqueued onto a queue named Test1Q.
The following topics are discussed:
Input Buffer Contents
The contents of the input buffer is shown in Table B-1.
FIELD |
VALUE |
---|---|
CITY |
San Jose |
STATE |
CA |
STATE |
TX |
STATE |
CO |
The contents of the three buffers that would result from "exploding" the input message is shown in Table B-2.
FIELD |
VALUE |
---|---|
Buffer1 |
|
CITY |
San Jose |
STATE |
CA |
Buffer2 |
|
CITY |
San Jose |
STATE |
TX |
Buffer3 |
|
CITY |
San Jose |
STATE |
CO |
MFL File Definitions
This section describes the MFL files that need to be created for this message explosion example. Listing B-1 shows the MFL file required to create the appropriate input format to parse the input buffer.
Listing B-1 explode_msg1.xml
<?xml version='1.0'?>
<!DOCTYPE MessageFormat SYSTEM 'mfl.dtd'>
<MessageFormat name="II_explode_msg1">
<FieldFormat name="CITY" type="String"/>
<FieldFormat name="$RSTATE" type="BigEndian2" />
<StructFormat name="State_Rep" repeatField="$RSTATE">
<FieldFormat name="STATE" type="String" accessMode="Controlling" />
</StructFormat>
</MessageFormat>
In the input buffer, the STATE field repeats a variable number of times. To account for this, a flat input format containing the single field STATE needs to be defined. The StructFormat statement in the MFL file creates this flat input format named "State_Rep". The field $RSTATE is the repeatField for this format; that is, it indicates the number of times that format appears in the message. The "$R" prefix in the name of the field tells Information Integrator to populate the repeatField by using the FML function Foccur(). The Foccur() function determines the number of occurrences of the given field. Taking advantage of the functionality supplied by FML allows you the freedom to include an arbitrary number of occurrences of a given field in the input buffer, without having to explicitly assign a value to a field that indicates the number of occurrences of that field.
Because the input format II_explode_msg1 defined in the above MFL file contains a flat input format, it must be a compound format. Only compound formats can contain other formats. Since compound formats cannot contain fields that are not included in other defined formats, MsgDefAdmin creates a flat input format with the fields CITY and $RSTATE. The name of this flat input format begins with "$STRUCT_", and it is visible only under the compound format II_explode_msg1 in the Formatter window (see Using the Formatter Window).
Now you need to define an output format into which the input message will be reformatted. This output format must allow for the fact that there will be a variable number of CITY/STATE pairs in the reformatted message. MFL file that could be used to create the appropriate output format.
Listing B-2 explode_msg2.xml
<?xml version='1.0'?>
<!DOCTYPE MessageFormat SYSTEM 'mfl.dtd'>
<MessageFormat name="II_explode_msg2">
<FieldFormat name="$RSTATE" type="BigEndian2" />
<StructFormat name="State2_Rep" repeatField="$RSTATE">
<FieldFormat name="CITY" type="String"/>
<FieldFormat name="STATE" type="String" accessMode="Controlling"/>
</StructFormat>
</MessageFormat>
As with the input format definition, there is a flat output format named "State2_Rep" which contains the fields CITY and STATE. This is created using the StructFormat statement in the MFL file. $RSTATE is the repeatField for this structure. There are two reasons for this:
The format II_explode_msg2 contains other formats, so it must be a compound format. Since compound formats cannot contain fields that are not included in other defined formats, MsgDefAdmin creates a flat output format with a name beginning with "$STRUCT$_" to contain the field $RSTATE.
Note: You may want to use the Formatter application to view the format definitions created by II_explode_msg1 and II_explode_msg2. For more information, refer to Building Format Definitions.
For more information on MFL files and the MsgDefAdmin utility, refer to Using MsgDefAdmin.
Rule Definitions
Now you need to define the necessary rules, following the steps below. For detailed instructions on performing these tasks, refer to Building Rules.
Note: Remember that the Message Type is always the same as the Input Format used to parse the input message.
Figure B-1 Figure 3: NewSubscription1
The above subscription contains three actions:
|
Copyright © 2000 BEA Systems, Inc. All rights reserved.
|