2012-01-27 3 views
0

私はJavaでいくつかのプロトコルを実装しようとしています。これを行うために、私はBinaryNotesコンパイラとそのAPIライブラリを使用していましたが、私はこの例に固執しています。ここに私のASN1入力ファイルです:BinaryNotesコンパイラにぶつかりました

Test 
DEFINITIONS ::= 
BEGIN 
    OPERATION ::= CLASS 
    { 
     &Argument OPTIONAL, 
     &opCode Code UNIQUE OPTIONAL 
    } 
    WITH SYNTAX 
    { 
     [ARGUMENT &Argument] 
     [CODE &opCode] 
    } 

    OperationA OPERATION ::= 
    { 
     ARGUMENT Arg 
     CODE global:{org(0) operA(1) ver(1) id(1)} 
    } 

    Code ::= CHOICE 
    { 
     local INTEGER, 
     global OBJECT IDENTIFIER 
    } 

    Arg ::= SEQUENCE 
    { 
     operationID INTEGER, 
     value ArgValue 
    } 

    ArgValue ::= OCTET STRING (SIZE(1..25)) 
END 

、ここ億コンパイラの出力です:test1.asn

  • ライン4:9:予期しないトークン:OPERATION
    1. は、ファイルをコンパイルします
    2. 行6:17:予期しない文字: '&'

    入力asn1ファイルをbnコンパイラで正常にコンパイルするには、どうすればよいですか? ありがとうございます。

    答えて

    0

    新しいASN.1クラスの構文はBinaryNotesではサポートされていません、ごめんなさい! はまた、あなたがこのような基本的なASN.1で試すことができCODE global:{org(0) operA(1) ver(1) id(1)} はサポートされていません。

    DEFINITIONS ::= 
    BEGIN 
        OPERATION ::= SEQUENCE 
        { 
         argument Arg OPTIONAL, 
         code Code OPTIONAL 
        } 
    
    
        Code ::= CHOICE 
        { 
         local INTEGER, 
         global OBJECT IDENTIFIER 
        } 
    
        Arg ::= SEQUENCE { 
        } 
    
    +0

    ありがとう。私はあなたのようなものを考えていましたが、私はCLASSの代わりにSEQUENCEを使うべきですか?もう一度あなたに感謝します。 – nick79

    +0

    問題はありませんが、BinaryNotesは基本的な共通ASN.1構文のみをサポートしていることを知っておく必要があります(実際に私はこのフレームワークの作者です:)) – abdolence

    +0

    フレームワークの開発で停止したために大変申し訳ありません:) – nick79

    1

    CLASSがSEQUENCEに変更することはできませんのでご注意ください。古いコンパイラではエラーメッセージを排除できますが、まったく別の意味があります。

    2008年版のASN.1をサポートしている新しいASN.1コンパイラを入手することをお勧めします。 http://www.itu.int/ITU-T/asn1/links/index.htmには、ASN.1ツールのリスト(無料でも商用のものもあります)があります。

    ポール

    +0

    Paulに感謝します。あなたが提供したリンクでは、OSS NoklavaのコンパイラだけがASN.1の2008年版をサポートしていますが、残念ながら無料のソリューションではありません。 Bouncycastleのapiライブラリを使用し、Javaクラスを手動で書きたい場合はどうすればいいですか?クラスを扱う方法。あなたはそれがSEQUENCEで変更することはできないと言って、私はSETなどと同じケースであると仮定します。 – nick79

    +0

    OSS Nokalvaコンパイラは無料ではありませんが、無料トライアルをダウンロードして、それが支払われる前にあなたに適しているかどうかを確認することができます。 CLASSの目的は、メッセージの内容の決定に使用されるローカル情報を格納することです。 CLASSオブジェクトは決してラインを越えて送られません。古いコンパイラで作業をしたい場合は、CLASSの定義を削除するだけです。しかし、CLASSやそのクラスの情報オブジェクトを参照する制約を手動で処理するコードを記述する必要があります。 –

    関連する問題