我的jpos ISO8583实现始终为消息长度添加前缀“ 1”

如何解决我的jpos ISO8583实现始终为消息长度添加前缀“ 1”

我的ISO jpos客户端实现正确打印了消息长度输出,但是当我执行tcpdump时,我看到消息长度以“ 1”为前缀。因此,tcpdump将消息头显示"10000431804003001000000000084946520200922160158801"而不是"0000431804003001000000000084946520200922160158801"

任何想法都可能是问题所在。

以下是我的客户打印出的消息长度和解压缩的ISO: 0000431804003001000000000084946520200922160158801

<log realm="post-channel/xx.xx.xx.x:xxxx" at="Tue Sep 22 16:01:58 WAT 2020.579" lifespan="1ms">
  <send>
    <isomsg direction="outgoing">
      <!-- org.jpos.iso.packager.GenericPackager[deploy/cfg/customizedPackager.xml] -->
      <header>303030303433</header>
      <field id="0" value="1804"/>
      <field id="11" value="849465"/>
      <field id="12" value="20200922160158"/>
      <field id="24" value="801"/>
    </isomsg>
  </send>
</log>

我的代码实现如下:

            Date currDate = new Date();
            SimpleDateFormat lda = new SimpleDateFormat("yyyyMMddHHmmss",Locale.getDefault());
            String d = lda.format(currDate);
        
            QMUX mux1 = (QMUX) NameRegistrar.getIfExists("mux.pesa-link-mux");
            LoggingUtil.logDebugInfo("SIGNON MUX: " + mux1.getName());
            Random randomGenerator = new Random();
            int randomInt = randomGenerator.nextInt(1000000);
            String formatedInt;
            formatedInt = String.format("%06d",randomInt);
            ISOMsg m = new ISOMsg();
            //m.setHeader("000043".getBytes());
            ISOPackager p = new GenericPackager("/usr/app/customized.xml");
            byte[] b = new byte[1];
            m.setPackager(p);
            m.setMTI("1804");
            m.set(11,formatedInt);
            m.set(12,d);
            m.set(24,"801");

            byte[] data = m.pack();
            short messageLength = (short) data.length;
            String msglen = String.format("%6s",String.valueOf(messageLength)).replace(' ','0');
            String message = msglen + new String(data);
            LoggingUtil.logDebugInfo(":: message length :: " + message + " :: len: " + msglen);
            ISOMsg resp = mux1.request(m,30 * 1000);

此处的频道配置

<channel-adaptor name="pd-channel-adaptor" class="org.jpos.q2.iso.ChannelAdaptor" logger="Q2">
     <channel class="org.jpos.iso.channel.PostChannel" type="client" connect="yes" logger="Q2"
             realm="post-channel" packager="org.jpos.iso.packager.GenericPackager">
            <property name="packager-config" value="deploy/cfg/customized.xml" />
<property name="host" value="1111.11.11.11" />
<property name="port" value="3322" />


    </channel>
    <in>pd_link_send</in>
    <out>pd_link_receive</out>
    <reconnect-delay>1000</reconnect-delay>
        <keep-alive>yes</keep-alive>
</channel-adaptor>

解决方法

您的服务器似乎期望该长度为6个ASCII数字,因此您需要使用属性ASCIIChannel设置为length-digits的{​​{1}}

6

而且您不必在标题中添加长度。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?