157 lines
5.9 KiB
Plaintext
157 lines
5.9 KiB
Plaintext
-----
|
|
XML Configuration
|
|
-----
|
|
|
|
XML Configuration
|
|
|
|
The MessageFactory can read a XML file to setup message templates, ISO headers by type and parsing templates,
|
|
which are the most cumbersome parts to configure programmatically.
|
|
|
|
There are three types of main elements that you need to specify in the config file: <<<header>>>,
|
|
<<<template>>>, and <<<parse>>>. All these must be contained in a single <<<j8583-config>>> element.
|
|
There is a DTD available at {{{http://j8583.sourceforge.net/j8583.dtd}}}.
|
|
|
|
* <<<header>>> element
|
|
|
|
Specify a <<<header>>> element for every type of message that needs an ISO header. Only one per message type:
|
|
|
|
+-----
|
|
<header type="0200">ISO015000050</header>
|
|
<header type="0400">ISO015000050</header>
|
|
+-----
|
|
|
|
<<New in 1.9:>> You can define a header as a reference to another header:
|
|
|
|
+-----
|
|
<header type="0800" ref="0200" />
|
|
+-----
|
|
|
|
The header for 0800 messages will be the same as the header for 0200 messages.
|
|
|
|
* <<<template>>> element
|
|
|
|
Each <<<template>>> element defines a message template, with the message type and the fields that the
|
|
template should include. Every new message of that type that the MessageFactory creates will contain those
|
|
same values, so this is very useful for defining fixed values, which will be the same in every message.
|
|
Only one template per type.
|
|
|
|
+-----
|
|
<template type="0200">
|
|
<field num="3" type="NUMERIC" length="6">650000</field>
|
|
<field num="32" type="LLVAR">456</field>
|
|
<field num="35" type="LLVAR">4591700012340000=</field>
|
|
<field num="43" type="ALPHA" length="40">Fixed-width data</field>
|
|
<field num="48" type="LLLVAR">Life, the Universe, and Everything|42</field>
|
|
<field num="49" type="ALPHA" length="3">840</field>
|
|
<field num="60" type="LLLVAR">B456PRO1+000</field>
|
|
<field num="61" type="LLLVAR">This field can have a value up to 999 characters long.</field>
|
|
<field num="100" type="LLVAR">999</field>
|
|
<field num="102" type="LLVAR">ABCD</field>
|
|
</template>
|
|
+-----
|
|
|
|
<<New in 1.9:>> You can define a template as extending another template, so that it includes
|
|
all the fields from the referenced template as well as any new fields defined in it, as well
|
|
as excluding fields from the referenced template:
|
|
|
|
+-----
|
|
<template type="0400" extends="0200">
|
|
<field num="90" type="ALPHA" length="42">Bla bla</field>
|
|
<field num="102" type="exclude" />
|
|
</template>
|
|
+-----
|
|
|
|
In the above example, the template for message type 0400 will include all fields defined in the
|
|
template for message type 0200 <except> field 102, and will additionally include field 90.
|
|
|
|
* <<<parse>>> element
|
|
|
|
Each <<<parse>>> element defines a parsing template for a message type. It must include all the fields that
|
|
an incoming message can contain, each field with its type and length (if needed). Only ALPHA and NUMERIC
|
|
types need to have a length specified. The other types either have a fixed length, or have their length
|
|
specified as part of the field (LLVAR and LLLVAR).
|
|
|
|
+-----
|
|
<parse type="0210">
|
|
<field num="3" type="NUMERIC" length="6" />
|
|
<field num="4" type="AMOUNT" />
|
|
<field num="7" type="DATE10" />
|
|
<field num="11" type="NUMERIC" length="6" />
|
|
<field num="12" type="TIME" />
|
|
<field num="13" type="DATE4" />
|
|
<field num="15" type="DATE4" />
|
|
<field num="17" type="DATE_EXP" />
|
|
<field num="32" type="LLVAR" />
|
|
<field num="35" type="LLVAR" />
|
|
<field num="37" type="NUMERIC" length="12" />
|
|
<field num="38" type="NUMERIC" length="6" />
|
|
<field num="39" type="NUMERIC" length="2" />
|
|
<field num="41" type="ALPHA" length="16" />
|
|
<field num="43" type="ALPHA" length="40" />
|
|
<field num="48" type="LLLVAR" />
|
|
<field num="49" type="ALPHA" length="3" />
|
|
<field num="60" type="LLLVAR" />
|
|
<field num="61" type="LLLVAR" />
|
|
<field num="70" type="ALPHA" length="3" />
|
|
<field num="100" type="LLVAR" />
|
|
<field num="102" type="LLVAR" />
|
|
<field num="126" type="LLLVAR" />
|
|
</parse>
|
|
+-----
|
|
|
|
<<New in 1.9:>> As with message templates, you can define parsing guides that extend other
|
|
parsing guides:
|
|
|
|
+-----
|
|
<parse type="0410" extends="0210">
|
|
<field num="90" type="ALPHA" length="42" />
|
|
<field num="102" type="exclude" />
|
|
</parse>
|
|
+----
|
|
|
|
* Composite fields
|
|
|
|
Another new feature introduced in 1.9 is the CompositeField. This is a CustomField that acts
|
|
as a container for several IsoValues, and it can be configured in the parsing guide of
|
|
a message type:
|
|
|
|
+-----
|
|
<parse type="0410">
|
|
<field num="125" type="LLLVAR">
|
|
<field num="1" type="ALPHA" length="5" />
|
|
<field num="2" type="LLVAR" />
|
|
<field num="3" type="NUMERIC" length="6" />
|
|
<field num="4" type="ALPHA" length="2" />
|
|
</field>
|
|
</parse>
|
|
+-----
|
|
|
|
In the above example, when a message with type 0410 is parsed, the value for field 125 will
|
|
be a <<<CompositeField>>> and you can obtain the subfields via <<<getField()>>> or
|
|
<<<getObjectValue()>>>. The <<<num>>> attribute of the subfields is ignored; it's just
|
|
there to pass the DTD validation.
|
|
|
|
This means that you can do this via code:
|
|
|
|
+-----
|
|
//Assuming original data for field 125 is "018one 03two123456OK"
|
|
CompositeField f = message.getObjectValue(125);
|
|
String sub1 = f.getObjectValue(0); //"one "
|
|
String sub2 = f.getObjectValue(1); //"two"
|
|
String sub3 = f.getObjectValue(2); //"123456"
|
|
String sub4 = f.getObjectValue(3); //"OK"
|
|
+-----
|
|
|
|
You can also create a CompositeField, store several subfields inside it, and store it in any
|
|
field inside an IsoMessage, specifying the same instance as the CustomField:
|
|
|
|
+-----
|
|
CompositeField f = new CompositeField().addValue(new IsoValue<String>(IsoType.ALPHA, "one", 5))
|
|
.addValue(new IsoValue<String>(IsoType.LLVAR, "two"))
|
|
.addValue(new IsoValue<Long>(IsoType.NUMERIC, 123l, 6))
|
|
.addValue(new IsoValue<String>(IsoType.ALPHA, "OK", 2));
|
|
message.setValue(125, f, f, IsoType.LLLVAR, 0);
|
|
+-----
|
|
|
|
When the message is encoded, field 125 will be "<<<018one 03two000123OK>>>".
|