如何在GenericPackager中处理具有不同用法的字段?

如何解决如何在GenericPackager中处理具有不同用法的字段?

我有几个字段会根据使用该字段的用途来更改其定义。

例如,F48定义为:

Variable Length,1-byte binary + 255 bytes,variable by usage,max 256 bytes

一次处理一种用法非常简单,例如,规范A和我的打包程序中定义了用法A:

Variable length,EBCDIC,max 256 bytes
<isofield
  id="48"
  length="255"
  name="ADITIONAL DATA - PRIVATE"
  class="org.jpos.iso.IFB_LLHECHAR"/>

但是另一种用法可以定义为

variable length,1-byte binary + 4 N,4-bit BCD

variable length,1-byte binary + 143 AN,EBCDIC

以此类推。我不太确定如何在通用打包程序中处理同一字段的多种用法

我已经考虑过使用isofieldpackager将其像子字段一样对待,然后根据需要,我只使用该子字段。

例如,我尝试使用用法A

<isofieldpackager
      id="48"
      length="255"
      name="F48 ADDITIONAL DATA - PRIVATE"
      emitBitmap="false"
      firstField="0"
      class="org.jpos.iso.IFB_LLHBINARY"
      packager="org.jpos.iso.packager.GenericSubFieldPackager">
<isofield
        id="0"
        length="255"
        name="ADITIONAL DATA - PRIVATE"
        class="org.jpos.iso.IFB_LLHECHAR"/>
</isofieldpackager>

,然后将该字段设置为isoMSG.set(“ 48.0”,“这是我的数据”),这似乎在大多数情况下都有效,但是当到达我的获取字段时,该字段将以一些不可读的数据为前缀过程。

感谢您的帮助,如果您需要更多信息,请告诉我

解决方法

在渠道级别,如果有办法弄清楚用法,则可以使用dynamic packager支持。因此,基本上,您创建了不同的程序包,然后通道决定在运行时使用哪个程序包。

但是最简单的方法是将其作为不透明的二进制字段处理,然后处理更高级别代码上的差异。

,

因此apr有正确的答案。我花了我不想承认的时间,但据我了解,您必须获取String的字节,然后通过您的解释器,前缀器等运行它。

import pyodbc
conn = pyodbc.connect('DSN=my-impala-dsn',autocommit=True) 
crsr = conn.cursor() 

crsr.execute("UPSERT INTO mydb.mytable (col1,col2,col3) values(?,?,?)",val1,val2,val3)

然后在您的通用打包程序中,它必须是(不透明的)二进制类

private static byte[] calcBytes(String s) throws ISOException {
    byte[] bytes = s.getBytes();
    EbcdicInterpreter.INSTANCE.interpret(s,bytes,0);
    return bytes;

二进制的原因是因为在您像上述方法一样手动解释后,其解释器不会再次更改您的字节。由于此字段的每次使用都具有1字节的二进制长度,因此我使用的类是IFB_LLH

只是以为我会在这里添加它给其他想要了解如何处理“不透明二进制字段”的人

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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元字符(。)和普通点?