2016-10-13 8 views
0

を出力を生成しません。以下はj8583:予想通りISOMessageパーサは、私はISOメッセージを解析するj8583イソパーサを使用しています

"0800A020 00000080 00100400 00000000 00000000 00000001 32393131 30303031 00105445 45535347 5354204D 0301"

私のコードです。

import com.solab.iso8583.IsoMessage; 
import com.solab.iso8583.IsoValue; 
import com.solab.iso8583.MessageFactory; 
import com.solab.iso8583.parse.ConfigParser; 

import java.io.BufferedReader; 
import java.io.File; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.text.ParseException; 

    public class ISOUtility { 

     private static BufferedReader reader; 

     private static String getMessage() throws IOException { 
      if (reader == null) { 
       reader = new BufferedReader(new InputStreamReader(System.in)); 
      } 
     // System.out.println("Paste your ISO8583 message here (no ISO headers): "); 
      return "08002020 00000080 00000000 00000001 32393131 30303031"; 
     } 

     public static void main(String [] args) throws IOException, ParseException { 
     // System.out.println("Hello"); 
      final MessageFactory<IsoMessage> mf = new MessageFactory<IsoMessage>(); 

      if (1 == 0) { 
      // System.out.println("Hello2"); 

      // ConfigParser.createFromClasspathConfig("j8583.xml"); 
       ConfigParser.configureFromDefault(mf); 

      } else { 
       System.out.println("Hello3"); 
       String path="C:\\Users\\DELL\\workspace\\SolabParser\\j8583.xml"; 
       if (System.console() != null) { 
        System.console().printf("Attempting to configure MessageFactory from %s...%n", path); 

       } 
       System.out.println("Messagefactory is done"); 
       String url = "C:\\Users\\DELL\\workspace\\SolabParser\\j8583.xml"; 
       if (url.contains("://")) { 
        System.out.println("else "); 

        ConfigParser.configureFromUrl(mf, new URL(args[0])); 
       } else { 
        System.out.println("else "); 
        ConfigParser.configureFromUrl(mf, new File(path).toURI().toURL()); 
       } 
      } 
      //Now read messages in a loop 
      String line = getMessage(); 
      // while (line != null && line.length() > 0) { 

      mf.setIgnoreLastMissingField(true); 
       System.out.println(mf.getIgnoreLastMissingField()); 

       IsoMessage m = mf.parseMessage(line.getBytes(), 0); 

       System.out.println("Hello5"); 
       if (m != null) { 
        System.out.printf("Message type: %04x%n", m.getType()); 
        System.out.println("FIELD TYPE VALUE"); 
        for (int i = 2; i <= 128; i++) { 
         IsoValue<?> f = m.getField(i); 
         if (f != null) { 
          System.out.printf("%5d %-6s [", i, f.getType()); 
          System.out.print(f.toString()); 
          System.out.println(']'); 
         } 
        } 
       } 
       line = getMessage(); 
     // } 
     } 

しかし、出力が正しくありません。

Message type: 0800 
FIELD TYPE VALUE 
    3 ALPHA [000000] 
    11 NUMERIC [00 000] 
    41 NUMERIC [00001 32393131 3] 
    60 LLLVAR [3031 00105445 5354204D 4553534] 
    70 NUMERIC [7 0] 

フィールド3を除くすべてのデータが正しくありません。

私はデータ内のスペースで変更を加えた場合、それは**エラーがスローされます。LLLVARフィールドの**

不足データ60

でこれを乗り越えるためにどれsugeestion。

ありがとうございます。

+1

最初に、入力バッファから空白を削除します。 –

+0

スペースを削除するとエラーが発生する:「LLLVARのデータが不十分」 –

答えて

3

私はコメントで回答しました:

1)メッセージバッファからスペースを削除します。

2)あなたのメッセージ形式のプロファイルを確認してください。

はあなたのケースでフィールド60のように見える長さのための4つの文字を持っています。 LLLLVAR。

--- 
msg:#"0800A0200000008000100400000000000000000000000001323931313030..0301" 
- MTI: "0800" # Message Type ID. // Network management request 
- DE000: "A020000000800010" # Primary bitmap // 1.3.11.41.60. 
- BM0:#"0400000000000000000000000001323931313030303100" # Fields at Primary Bitmap 
    - DE001: "0400000000000000" # Secondary bitmap // 70. 
    - DE003:#"000000" # PC 
    - S01: "00" # Transaction Code. // Purchase of goods or services 
    - S02: "00" # Account, from. // Standard purchase 
    - S03: "00" # Account, to. // Standard purchase 
    - DE011: "000001" # STAN. // 1 
    - DE041: "3239313130303031" # CATI. // "29110001" 
    - DE060:#"001054455354204D45535347" 
    - len: "0010" // 10 
    - val: "54455354204D45535347" // "TEST MESSG" 
- BM1:#"0301" # Fields at Secondary Bitmap 
    - DE070: "0301" # Network management information code // 301 - Echo test 
+0

ありがとうございました。プロフィールをチェックするには?オンラインツールはありますか? –

+0

ISO 8583はフィールドフォーマットで可変です。別のあなたの質問によるとhttp://stackoverflow.com/questions/40013434/j8583-iso8583-messagefactory-has-no-parsing-guide-for-message-type-0800あなたのプロトコルのニーズのXML構成プロファイルを変更することがあります。私はj8583以外のツールを使用しており、このJava APIの深いところであなたをサポートすることはできません。 –

+0

とフィールド60の長さはどのようにして見つけられますか?あなたが掲示したように、それはlen: "0010"とval: "001054455354204D45535347"を表示します。これを説明していただけますか?私はISO8583を初めて使用しています。私はLLLLVARの場合、最初の4文字はフィールドの長さを定義することを知っています。使用しているj8583のバージョンを「いいえ列挙型定数com.solab.iso8583.IsoType.LLLLVAR」 –

関連する問題