Exception while processing Signed/Zoned decimal data

444 views
Skip to first unread message

Sridhar

unread,
Sep 2, 2013, 5:56:50 AM9/2/13
to legsta...@googlegroups.com

 Hi Fady,
            I am trying to process some host data which contain Zoned decimal values, I am getting some exception which seems to be related to charset used to process the bytes.
            Would you help me in this. Thanks.
             
             Caused by: com.legstar.coxb.transform.HostTransformException: ConversionException for element:DetStrEventMls Cobol name:DET-STR-EVENT-MLS Reason:Host data contains a byte that is not a valid zoned decimal byte. Host data at offset 94=0x303030303030323743
    at com.legstar.coxb.transform.AbstractHostToJavaTransformer.transform(AbstractHostToJavaTransformer.java:273)
    at com.legstar.coxb.transform.AbstractHostToJavaTransformer.transform(AbstractHostToJavaTransformer.java:195)
    at com.legstar.coxb.transform.AbstractHostToJavaTransformer.transform(AbstractHostToJavaTransformer.java:150)
    at com.legstar.coxb.transform.AbstractHostToJavaTransformer.transform(AbstractHostToJavaTransformer.java:132)
       ... 30 more
Caused by: ConversionException for element:DetStrEventMls Cobol name:DET-STR-EVENT-MLS Reason:Host data contains a byte that is not a valid zoned decimal byte. Host data at offset 94=0x303030303030323743
    at com.legstar.coxb.convert.simple.CobolSimpleConverter.throwHostException(CobolSimpleConverter.java:60)
    at com.legstar.coxb.convert.simple.CobolZonedDecimalSimpleConverter.fromHost(CobolZonedDecimalSimpleConverter.java:107)
    at com.legstar.coxb.impl.visitor.CobolUnmarshalVisitor.visit(CobolUnmarshalVisitor.java:293)
    at com.legstar.coxb.impl.CZonedDecimalBinding.accept(CZonedDecimalBinding.java:51)
    at com.legstar.coxb.impl.visitor.CobolUnmarshalVisitor.visit(CobolUnmarshalVisitor.java:91)
    at com.legstar.coxb.common.CComplexBinding.accept(CComplexBinding.java:72)
    at com.legstar.coxb.transform.AbstractHostToJavaTransformer.transform(AbstractHostToJavaTransformer.java:253)
    ... 35 more

           

      1.  Two Host data samples
              DET15429 RT32000434086 MPCGR  152013-02-15-07.00.00.0000002013-08-26-03.33.42.557440REGULAR   00000027C
              DET                 000164257                   2013-02-15-06.30.00.0000002013-08-26-03.33.42.495806COMPDAY  00000013{

      2.  Code that process this:

                        StrtDetLayoutTransformers layoutTf = new StrtDetLayoutTransformers();
       
                try
       
                {
           
                StrtDetLayout outData = layoutTf.toJava(messageText.getBytes(), "ASCII"); //  I tried using EBCDIC  here, but did not worked out. Do I need to use any specific version
           
                return outData;
       
                }
       
                catch (Exception e)
       
                {
           
                throw new CouldNotParseException(e);
       
                }

      3.  Layout

                01 STRT-DET-LAYOUT.
                         05 DET-MSG-HDR                   PIC X(03) VALUE SPACES.
                         05 DET-CIRC7R                   PIC X(06) VALUE SPACES.
                         05 DET-BOARD-ID                   PIC X(04) VALUE SPACES.
                         05 DET-EMP-NBR                  PIC X(09) VALUE SPACES.
                         05 DET-TRN-SYM                  PIC X(10) VALUE SPACES.
                         05 DET-ORDER-TS                 PIC X(26) VALUE SPACES.
                         05 DET-TS                       PIC X(26) VALUE SPACES.
                         05 DET-STR-EVENT-TYP            PIC X(10) VALUE SPACES.
                         05 DET-STR-EVENT-MLS            PIC S9(09).
    Thanks,
    Sridhar.

Sridhar

unread,
Sep 2, 2013, 6:11:36 AM9/2/13
to legsta...@googlegroups.com

     Using EBCIDIC encoding worked.

       StrtDetLayout outData = layoutTf.toJava(messageText.getBytes("Cp1047"), "Cp1047");

Fady

unread,
Sep 2, 2013, 7:15:26 AM9/2/13
to legsta...@googlegroups.com
Yes, zoned decimals are not supported with a non EBCDIC character set.

This is a limitation of the current com.legstar.coxb.convert.simple.CobolZonedDecimalSimpleConverter implementation.

You might want to file an enhancement request here: https://code.google.com/p/legstar/issues/list

Fady
Reply all
Reply to author
Forward
0 new messages