QMHSNDM parameters

Issue #8 resolved
Aaron Bartell created an issue

I am trying to figure out what I am doing wrong with the following call to QMHSNDM. I believe I have the parameter list correctly defined.

To recreate the issue, first create the message queue CRTMSGQ MSGQ(AARONLIB/KAFKA) SIZE(100 100 *NOMAX) TEXT('Kafka') AUT(*CHANGE)

ipgm.py

from itoolkit import *
from itoolkit.lib.ilibcall import *
itransport = iLibCall()

#itool = iToolKit(iparm=0, iret=0, ids=1, irow=0)
itool = iToolKit()

itool.add(
 iPgm('qmhsndm','QMHSNDM',{'error':'on'})
 .addParm(iData('msgId','7a',''))
 .addParm(iData('qualMsgF','20a',''))
 .addParm(iData('msgTxt','2a','Hi'))
 .addParm(iData('msgTxtLen','10i0','2'))
 .addParm(iData('msgType','10a','*INFO'))
 .addParm(iData('msgQueues','20a','KAFKA     AARONLIB  '))
 .addParm(iData('nbrQueues','10i0','1'))
 .addParm(iData('rplyQueue','20a',''))
 .addParm(iData('msgKey','4a',''))
 .addParm(
  iDS('errorCode')
   .addData(iData('bytesProv','10i0',''))
   .addData(iData('bytesAvail','10i0',''))
  )
)

itool.trace_open()
itool.call(itransport)
itool.trace_close()

output = itool.dict_out('sndpgmmsg')
print(output)

Here is the output I am getting.

$ python3 ipgm.py
***********************
control Tue Oct 10 15:54:34 2017
 ctl (*here *cdata) ipc (*na) ebcdic_ccsid (0) pase_ccsid (0)
input Tue Oct 10 15:54:34 2017
<?xml version='1.0'?>
<xmlservice><pgm error="on" name="QMHSNDM" var="qmhsndm"><parm io="both" var="p1"><data type="7a" var="msgId"/></parm><parm io="both" var="p2"><data type="20a" var="qualMsgF"/></parm><parm io="both" var="p3"><data type="2a" var="msgTxt"><![CDATA[Hi]]></data></parm><parm io="both" var="p4"><data type="10i0" var="msgTxtLen"><![CDATA[2]]></data></parm><parm io="both" var="p5"><data type="10a" var="msgType"><![CDATA[*INFO]]></data></parm><parm io="both" var="p6"><data type="20a" var="msgQueues"><![CDATA[KAFKA     AARONLIB  ]]></data></parm><parm io="both" var="p7"><data type="10i0" var="nbrQueues"><![CDATA[1]]></data></parm><parm io="both" var="p8"><data type="20a" var="rplyQueue"/></parm><parm io="both" var="p9"><data type="4a" var="msgKey"/></parm><parm io="both" var="p10"><ds var="errorCode"><data type="10i0" var="bytesProv"/><data type="10i0" var="bytesAvail"/></ds></parm></pgm></xmlservice>

output Tue Oct 10 15:54:34 2017
<?xml version='1.0'?>
<xmlservice><pgm error="on" name="QMHSNDM" var="qmhsndm">
<parm io="both" var="p1">
<data type="7a" var="msgId"><![CDATA[]]></data>
</parm>
<parm io="both" var="p2">
<data type="20a" var="qualMsgF"><![CDATA[]]></data>
</parm>
<parm io="both" var="p3">
<data type="2a" var="msgTxt"><![CDATA[Hi]]></data>
</parm>
<parm io="both" var="p4">
<data type="10i0" var="msgTxtLen"><![CDATA[2]]></data>
</parm>
<parm io="both" var="p5">
<data type="10a" var="msgType"><![CDATA[*INFO]]></data>
</parm>
<parm io="both" var="p6">
<data type="20a" var="msgQueues"><![CDATA[KAFKA     AARONLIB]]></data>
</parm>
<parm io="both" var="p7">
<data type="10i0" var="nbrQueues"><![CDATA[1]]></data>
</parm>
<parm io="both" var="p8">
<data type="20a" var="rplyQueue"><![CDATA[]]></data>
</parm>
<parm io="both" var="p9">
<data type="4a" var="msgKey"><![CDATA[
parse (fail) Tue Oct 10 15:54:34 2017
3c3f786d6c2076657273696f6e3d2731 <?xml version='1
2e30273f3e0a3c786d6c736572766963 .0'?>.<xmlservic
653e3c70676d206572726f723d226f6e e><pgm error="on
22206e616d653d22514d48534e444d22 " name="QMHSNDM"
207661723d22716d68736e646d223e0a  var="qmhsndm">.
3c7061726d20696f3d22626f74682220 <parm io="both"
7661723d227031223e0a3c6461746120 var="p1">.<data
747970653d22376122207661723d226d type="7a" var="m
73674964223e3c215b43444154415b5d sgId"><![CDATA[]
5d3e3c2f646174613e0a3c2f7061726d ]></data>.</parm
3e0a3c7061726d20696f3d22626f7468 >.<parm io="both
22207661723d227032223e0a3c646174 " var="p2">.<dat
6120747970653d223230612220766172 a type="20a" var
3d227175616c4d736746223e3c215b43 ="qualMsgF"><![C
444154415b5d5d3e3c2f646174613e0a DATA[]]></data>.
3c2f7061726d3e0a3c7061726d20696f </parm>.<parm io
3d22626f746822207661723d22703322 ="both" var="p3"
3e0a3c6461746120747970653d223261 >.<data type="2a
22207661723d226d7367547874223e3c " var="msgTxt"><
215b43444154415b48695d5d3e3c2f64 ![CDATA[Hi]]></d
6174613e0a3c2f7061726d3e0a3c7061 ata>.</parm>.<pa
726d20696f3d22626f74682220766172 rm io="both" var
3d227034223e0a3c6461746120747970 ="p4">.<data typ
653d223130693022207661723d226d73 e="10i0" var="ms
675478744c656e223e3c215b43444154 gTxtLen"><![CDAT
415b325d5d3e3c2f646174613e0a3c2f A[2]]></data>.</
7061726d3e0a3c7061726d20696f3d22 parm>.<parm io="
626f746822207661723d227035223e0a both" var="p5">.
3c6461746120747970653d2231306122 <data type="10a"
207661723d226d736754797065223e3c  var="msgType"><
215b43444154415b2a494e464f5d5d3e ![CDATA[*INFO]]>
3c2f646174613e0a3c2f7061726d3e0a </data>.</parm>.
3c7061726d20696f3d22626f74682220 <parm io="both"
7661723d227036223e0a3c6461746120 var="p6">.<data
747970653d2232306122207661723d22 type="20a" var="
6d7367517565756573223e3c215b4344 msgQueues"><![CD
4154415b4b41464b4120202020204141 ATA[KAFKA     AA
524f4e4c49425d5d3e3c2f646174613e RONLIB]]></data>
0a3c2f7061726d3e0a3c7061726d2069 .</parm>.<parm i
6f3d22626f746822207661723d227037 o="both" var="p7
223e0a3c6461746120747970653d2231 ">.<data type="1
30693022207661723d226e6272517565 0i0" var="nbrQue
756573223e3c215b43444154415b315d ues"><![CDATA[1]
5d3e3c2f646174613e0a3c2f7061726d ]></data>.</parm
3e0a3c7061726d20696f3d22626f7468 >.<parm io="both
22207661723d227038223e0a3c646174 " var="p8">.<dat
6120747970653d223230612220766172 a type="20a" var
3d2272706c795175657565223e3c215b ="rplyQueue"><![
43444154415b5d5d3e3c2f646174613e CDATA[]]></data>
0a3c2f7061726d3e0a3c7061726d2069 .</parm>.<parm i
6f3d22626f746822207661723d227039 o="both" var="p9
223e0a3c6461746120747970653d2234 ">.<data type="4
6122207661723d226d73674b6579223e a" var="msgKey">
3c215b43444154415b <![CDATA[
parse step: 2 (1-ok, 2-*BADPARSE, 3-*NOPARSE)
{'error': {'error1': ' ?xml version=\'1.0\'? xmlservice pgm error="on" name="QMHSNDM" var="qmhsndm" parm io="both" var="p1" data type="7a" var="msgId" ![CDATA[]] /data /parm parm io="both" var="p2" data type="20a" var="qualMsgF" ![CDATA[]] /data /parm parm io="both" var="p3" data type="2a" var="msgTxt" ![CDATA[Hi]] /data /parm parm io="both" var="p4" data type="10i0" var="msgTxtLen" ![CDATA[2]] /data /parm parm io="both" var="p5" data type="10a" var="msgType" ![CDATA[*INFO]] /data /parm parm io="both" var="p6" data type="20a" var="msgQueues" ![CDATA[KAFKA AARONLIB]] /data /parm parm io="both" var="p7" data type="10i0" var="nbrQueues" ![CDATA[1]] /data /parm parm io="both" var="p8" data type="20a" var="rplyQueue" ![CDATA[]] /data /parm parm io="both" var="p9" data type="4a" var="msgKey" ![CDATA[', 'sndpgmmsg': {...}, 'error': '*BADPARSE'}}

Comments (4)

  1. Former user Account Deleted

    The only thing you need to change is msgKey 4a to 4b. This is a class of system API call documentation i like to refer to as 'liar, liar, pants on fire'. Aka, the data in msgKey is not character, but binary.

     .addParm(iData('msgKey','4a',''))
    
    ... change to ...
    
     .addParm(iData('msgKey','4b',''))
    

    I also took liberty to fix your errorcode format ...

    from itoolkit import *
    from itoolkit.lib.ilibcall import *
    itransport = iLibCall()
    
    #itool = iToolKit(iparm=0, iret=0, ids=1, irow=0)
    itool = iToolKit()
    
    itool.add(
     iPgm('qmhsndm','QMHSNDM',{'error':'on'})
     .addParm(iData('msgId','7a',''))
     .addParm(iData('qualMsgF','20a',''))
     .addParm(iData('msgTxt','2a','Hi'))
     .addParm(iData('msgTxtLen','10i0','2'))
     .addParm(iData('msgType','10a','*INFO'))
     .addParm(iData('msgQueues','20a','KAFKA     AARONLIB  '))
     .addParm(iData('nbrQueues','10i0','1'))
     .addParm(iData('rplyQueue','20a',''))
     .addParm(iData('msgKey','4b',''))
     .addParm(
      iDS('ERRC0100_t',{'len':'errlen'})
      .addData(iData('errRet','10i0',''))
      .addData(iData('errAvl','10i0',''))
      .addData(iData('errExp','7A','',{'setlen':'errlen'}))
      .addData(iData('errRsv','1A',''))
     )
    )
    
    itool.trace_open()
    itool.call(itransport)
    itool.trace_close()
    
    output = itool.dict_out('sndpgmmsg')
    print(output)
    
  2. Former user Account Deleted

    Here is corrected output ...

    bash-4.3$ python arron1.py 
    ***********************
    control Wed Oct 11 09:06:39 2017
     ctl (*here *cdata) ipc (*na) ebcdic_ccsid (0) pase_ccsid (0)
    input Wed Oct 11 09:06:39 2017
    <?xml version='1.0'?>
    <xmlservice><pgm error="on" name="QMHSNDM" var="qmhsndm"><parm io="both" var="p1"><data type="7a" var="msgId"/></parm><parm io="both" var="p2"><data type="20a" var="qualMsgF"/></parm><parm io="both" var="p3"><data type="2a" var="msgTxt"><![CDATA[Hi]]></data></parm><parm io="both" var="p4"><data type="10i0" var="msgTxtLen"><![CDATA[2]]></data></parm><parm io="both" var="p5"><data type="10a" var="msgType"><![CDATA[*INFO]]></data></parm><parm io="both" var="p6"><data type="20a" var="msgQueues"><![CDATA[KAFKA     AARONLIB  ]]></data></parm><parm io="both" var="p7"><data type="10i0" var="nbrQueues"><![CDATA[1]]></data></parm><parm io="both" var="p8"><data type="20a" var="rplyQueue"/></parm><parm io="both" var="p9"><data type="4b" var="msgKey"/></parm><parm io="both" var="p10"><ds len="errlen" var="ERRC0100_t"><data type="10i0" var="errRet"/><data type="10i0" var="errAvl"/><data setlen="errlen" type="7A" var="errExp"/><data type="1A" var="errRsv"/></ds></parm></pgm></xmlservice>
    
    output Wed Oct 11 09:06:39 2017
    <?xml version='1.0'?>
    <xmlservice><pgm error="on" name="QMHSNDM" var="qmhsndm">
    <parm io="both" var="p1">
    <data type="7a" var="msgId"><![CDATA[]]></data>
    </parm>
    <parm io="both" var="p2">
    <data type="20a" var="qualMsgF"><![CDATA[]]></data>
    </parm>
    <parm io="both" var="p3">
    <data type="2a" var="msgTxt"><![CDATA[Hi]]></data>
    </parm>
    <parm io="both" var="p4">
    <data type="10i0" var="msgTxtLen"><![CDATA[2]]></data>
    </parm>
    <parm io="both" var="p5">
    <data type="10a" var="msgType"><![CDATA[*INFO]]></data>
    </parm>
    <parm io="both" var="p6">
    <data type="20a" var="msgQueues"><![CDATA[KAFKA     AARONLIB]]></data>
    </parm>
    <parm io="both" var="p7">
    <data type="10i0" var="nbrQueues"><![CDATA[1]]></data>
    </parm>
    <parm io="both" var="p8">
    <data type="20a" var="rplyQueue"><![CDATA[]]></data>
    </parm>
    <parm io="both" var="p9">
    <data type="4b" var="msgKey"><![CDATA[000002D0]]></data>
    </parm>
    <parm io="both" var="p10">
    <ds len="errlen" var="ERRC0100_t">
    <data type="10i0" var="errRet"><![CDATA[0]]></data>
    <data type="10i0" var="errAvl"><![CDATA[0]]></data>
    <data setlen="errlen" type="7A" var="errExp"><![CDATA[]]></data>
    <data type="1A" var="errRsv"><![CDATA[]]></data>
    </ds>
    </parm>
    <success><![CDATA[+++ success  QMHSNDM]]></success>
    </pgm>
    </xmlservice>
    parse step: 1 (1-ok, 2-*BADPARSE, 3-*NOPARSE)
    {'error': {'sndpgmmsg': {...}, u'qmhsndm': {u'nbrQueues': u'1', u'rplyQueue': '', u'msgQueues': u'KAFKA     AARONLIB', u'msgId': '', u'success': u'+++ success  QMHSNDM', u'msgTxtLen': u'2', u'msgType': u'*INFO', u'ERRC0100_t': {u'errExp': '', u'errRet': u'0', u'errRsv': '', u'errAvl': u'0'}, u'qualMsgF': '', u'msgTxt': u'Hi', u'msgKey': u'000002D0'}}}
    bash-4.3$
    
  3. Former user Account Deleted

    little training for debug ...

    Real problem was system API documentation just plain misleading. Aka, the data in msgKey is not character, but binary (change msgKey 4a to 4b).

    .addParm(iData('msgKey','4a',''))
    
    ... change to ...
    
     .addParm(iData('msgKey','4b',''))
    

    ... how does a human know documentation is lying ???

    The key indicator was that debug/trace XML simply stopped middle of the XML document. Aka, var="msgKey" simply did not continue. Of course, this means the binary data most likely had a zero in the data, which acted like a null terminated string for the XML string. The trace output simply did not finish printing the entire XML document ... ding, ding, ding, debug rule (below) ... system API needed binary type not character.

    6f3d22626f746822207661723d227039 o="both" var="p9
    223e0a3c6461746120747970653d2234 ">.<data type="4
    6122207661723d226d73674b6579223e a" var="msgKey">
    3c215b43444154415b <![CDATA[
    

    Therefore, as a general debug rule, when debugging system APIs and you see truncated XML, the most likely need is to change your data type from character to binary (change msgKey 4a to 4b).

    Aka, the 'liar, liar, pants on fire' system API debug rule.

  4. Log in to comment