Unpacking Nested Messages.

347 views
Skip to first unread message

Chris

unread,
Jun 8, 2009, 6:17:42 AM6/8/09
to jPOS Users
I'm having a problem when unpacking nested messages

I have defined the following subfield packager in my packager file but
im getting a null pointer exception...

Any clue as to what the problem might be?

<isofieldpackager
id="48"
length="999"
name="Additional data - private"
class="org.jpos.iso.IFA_LLLCHAR"
packager="org.jpos.iso.packager.GenericPackager">

<isofield id="148" length="60" name="FIELD 48 - PDS 148"
class="org.jpos.iso.IFA_LLLCHAR"/>
<isofield id="149" length="6" name="FIELD 48 - PDS 149"
class="org.jpos.iso.IFA_NUMERIC"/>
<isofield id="165" length="30" name="FIELD 48 - PDS 165"
class="org.jpos.iso.IFA_LLLCHAR"/>
<isofield id="249" length="10" name="FIELD 48 - PDS 249"
class="org.jpos.iso.IFA_LLLCHAR"/>
<isofield id="250" length="14" name="FIELD 48 - PDS 250"
class="org.jpos.iso.IFA_NUMERIC"/>
<isofield id="252" length="124" name="FIELD 48 - PDS 252"
class="org.jpos.iso.IFA_LLLCHAR"/>
<isofield id="262" length="1" name="FIELD 48 - PDS 262"
class="org.jpos.iso.IFA_NUMERIC"/>

</isofieldpackager>


<iso-exception>
java.lang.NullPointerException
<nested-exception>
java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
</nested-exception>
org.jpos.iso.ISOException: java.lang.NullPointerException
(java.lang.NullPointerException)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:293)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
Nested:java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
</iso-exception>
<iso-exception>
java.lang.NullPointerException
<nested-exception>
java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
</nested-exception>
org.jpos.iso.ISOException: java.lang.NullPointerException
(java.lang.NullPointerException)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:293)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
Nested:java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
</iso-exception>

Mark Salter

unread,
Jun 8, 2009, 8:22:21 AM6/8/09
to jpos-...@googlegroups.com
Chris wrote:
> I'm having a problem when unpacking nested messages
[snip]

>
> <isofieldpackager
> id="48"
> length="999"
> name="Additional data - private"
> class="org.jpos.iso.IFA_LLLCHAR"

This field is going to need to be IFA_LLLBINARY if you are ever going to
build these records (use pack). In processing the pack, the subfield
result is passed as BINARY to the 'holding' field.

Can you tell which subfield (number) the code is trying to unpack? Can
you add a Logger to the packager(s)?

I wonder if the code currently expects all subfields (1 - 148) to be
defined - at least in dummy form.

--
Mark

Chris

unread,
Jun 8, 2009, 8:36:56 AM6/8/09
to jPOS Users
Hi Mark,

This is what the logger is spitting out....

java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)

error unpacking field 48

org.jpos.iso.ISOException: java.lang.NullPointerException
(java.lang.NullPointerException)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:293)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
Nested:java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
<log realm="MasterCard IPM Logger" at="Mon Jun 08 14:31:54 CEST
2009.638">
<unpack>

<bitmap>{1, 2, 3, 4, 12, 22, 24, 25, 26, 30, 31, 33, 38, 41, 42,
43, 48, 49, 71, 93, 94, 95, 100}</bitmap>
<unpack fld="2" packager="org.jpos.iso.IFA_LLCHAR">
<value>544927XXXXXX9960</value>
</unpack>
<unpack fld="3" packager="org.jpos.iso.IFA_NUMERIC">
<value>000000</value>
</unpack>
<unpack fld="4" packager="org.jpos.iso.IFA_NUMERIC">
<value>000000001997</value>
</unpack>
<unpack fld="12" packager="org.jpos.iso.IFA_NUMERIC">
<value>090316031311</value>
</unpack>
<unpack fld="22" packager="org.jpos.iso.IF_CHAR">
<value>099050S00110</value>
</unpack>
<unpack fld="24" packager="org.jpos.iso.IFA_NUMERIC">
<value>450</value>
</unpack>
<unpack fld="25" packager="org.jpos.iso.IFA_NUMERIC">
<value>4837</value>
</unpack>
<unpack fld="26" packager="org.jpos.iso.IFA_NUMERIC">
<value>5967</value>
</unpack>
<unpack fld="30" packager="org.jpos.iso.IFA_NUMERIC">
<value>000000001997000000000000</value>
</unpack>
<unpack fld="31" packager="org.jpos.iso.IFA_LLCHAR">
<value>75542469074090418511388</value>
</unpack>
<unpack fld="33" packager="org.jpos.iso.IFA_LLCHAR">
<value>002202</value>
</unpack>
<unpack fld="38" packager="org.jpos.iso.IF_CHAR">
<value>B42119</value>
</unpack>
<unpack fld="41" packager="org.jpos.iso.IF_CHAR">
<value>99999999</value>
</unpack>
<unpack fld="42" packager="org.jpos.iso.IF_CHAR">
<value>999999999999999</value>
</unpack>
<unpack fld="43" packager="org.jpos.iso.IFA_LLCHAR">
<value>XX9999.com \ \999-9999999 \ AZ USA</value>
</unpack>
<iso-exception>
java.lang.NullPointerException
<nested-exception>
java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
</nested-exception>
org.jpos.iso.ISOException: java.lang.NullPointerException
(java.lang.NullPointerException)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:293)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
Nested:java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
</iso-exception>
<iso-exception>
java.lang.NullPointerException
<nested-exception>
java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
</nested-exception>
org.jpos.iso.ISOException: java.lang.NullPointerException
(java.lang.NullPointerException)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:293)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
Nested:java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
</iso-exception>
</unpack>
</log>
org.jpos.iso.ISOException: java.lang.NullPointerException
(java.lang.NullPointerException)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:293)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
Nested:java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)
Nested:java.lang.NullPointerException
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:209)
at org.jpos.iso.ISOMsgFieldPackager.unpack(ISOMsgFieldPackager.java:
107)
at org.jpos.iso.ISOBasePackager.unpack(ISOBasePackager.java:229)
at org.jpos.iso.ISOMsg.unpack(ISOMsg.java:322)
at vitalProcessor.test.testIPM(test.java:32)
at vitalProcessor.Runner.main(Runner.java:14)


Andy Orrock

unread,
Jun 8, 2009, 8:57:03 AM6/8/09
to jpos-...@googlegroups.com
Did you see Mark's comment? You make no mention of it in your response.

Repeat:

"This field is going to need to be IFA_LLLBINARY if you are ever going to
build these records (use pack). In processing the pack, the subfield result
is passed as BINARY to the 'holding' field."

Here's the start of the MasterCard Field 48 Subfield Packager (ASCII
Version) - note starred line:

<isofieldpackager
id="48"
length="999"
name="EUROPAY FIELD 48"
class="org.jpos.iso.IFA_LLLBINARY" ****************
packager="org.jpos.iso.packager.EuroSubFieldPackager">
<isofield
id="0"
length="1"
name="PLACEHOLDER"
class="org.jpos.iso.IF_CHAR"/>
<isofield
id="1"
length="18"
name="Field 48 - PDS01"
class="org.jpos.iso.IFMC_LLCHAR"/>
<isofield
id="2"
length="4"
name="Field 48 - PDS02"
class="org.jpos.iso.IFMC_LLCHAR"/>
[snip]

Mark Salter

unread,
Jun 8, 2009, 9:45:15 AM6/8/09
to jpos-...@googlegroups.com

I think my response was a bit imprecise. Certainly the holding field
will need adjusting, but I think on unpack it is the 'missing' field
definitions that is the issue.

I wasn't 100% certain though and I was hoping we could prove that all
subfields needed to be defined, by checking which subfield (probably
subfield 1) was being processed at the time the exception was thrown.

I also didn't think of seeking out an existing subfield implementation
that confirm this need; thank you Andy.

8)

--
Mark

Chris

unread,
Jun 8, 2009, 11:00:02 AM6/8/09
to jPOS Users
Should I be defining all the sub fields?

I also can't seem to understand the use of the PLACEHOLDER field. What
is its use?

Just a note... i am using iso93ascii.xml as a packager. I am parsing
mastercard IPM files.

On the bright side...

The following definition of DE 48 managed to start giving me some
unpack output...

<isofieldpackager
id="48"
length="999"
name="Additional data - private"
class="org.jpos.iso.IFA_LLLBINARY"
packager="org.jpos.iso.packager.ISO93APackager">


<isofield id="0" length="999" name="FIELD 48 - PDS 148"
class="org.jpos.iso.IFA_LLLCHAR"/> --- > PDS0148
<isofield id="1" length="3" name="FIELD 48 - PDS 149"
class="org.jpos.iso.IFA_NUMERIC"/> ---> PDS0149

</isofieldpackager>


but field 0 is wrong since it reading in some extra values from the
begining and the end ...

<unpack fld="48" packager="org.jpos.iso.ISOMsgFieldPackager">
<isomsg id="48">
<field id="0" value="80088402840201"/>
<field id="1" value="490"/>
</isomsg>

Andy Orrock

unread,
Jun 8, 2009, 11:19:01 AM6/8/09
to jpos-...@googlegroups.com
My example was not meant to be taken literally.

For the record: Field 0 in my example is the Transaction Category Code
('TCC') as specified in the MasterCard Customer Interface Specification
('CIS'), which is based on the ISO 8583–1987 international message standard.

If your implementation doesn't contain a TCC, then skip the field 0
definition in field 48.

Andy

-----Original Message-----
From: jpos-...@googlegroups.com [mailto:jpos-...@googlegroups.com] On
Behalf Of Chris
Sent: Monday, June 08, 2009 10:00 AM
To: jPOS Users
Subject: Re: Unpacking Nested Messages.


Reply all
Reply to author
Forward
0 new messages