【问题标题】:Stuck with BinaryNotes compiler卡在 BinaryNotes 编译器上
【发布时间】:2012-01-27 08:50:58
【问题描述】:

我正在尝试用 Java 实现一些协议。为了做到这一点,我使用了 BinaryNotes 编译器和他们的 api 库,但我坚持使用这个示例。这是我的 asn1 输入文件:

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

这里是 bn 编译器的输出:

  1. 编译文件:test1.asn
  2. 第 4:9 行:意外令牌:OPERATION
  3. 第 6:17 行:意外字符:'&'

我应该如何修改我的输入 asn1 文件以便使用 bn 编译器成功编译它。 提前致谢。

【问题讨论】:

    标签: java asn.1


    【解决方案1】:

    请注意,不能将 CLASS 更改为 SEQUENCE。这可能会消除旧编译器中的错误消息,但会产生完全不同的含义。

    我建议您获取更新的 ASN.1 编译器,该编译器确实支持 2008 版 ASN.1。您可以在 http://www.itu.int/ITU-T/asn1/links/index.htm 找到 ASN.1 工具列表(一些免费,一些商业)。

    保罗

    【讨论】:

    • 谢谢保罗。在您提供的链接上,我可以看到只有 OSS Noklava 的编译器支持 2008 版 ASN.1,但不幸的是它不是免费的解决方案。如果我想使用 Bouncycastle 的 api 库并手动编写我的 Java 类怎么办。如何处理类。你说它不能用 SEQUENCE 改变,我假设它与 SET 等情况相同。在此先感谢。
    • 您说 OSS Nokalva 编译器不是免费的是正确的,但您可以在付费前下载免费试用版看看是否适合您。 CLASS 的目的是存储用于确定消息内容的本地信息。 CLASS 对象永远不会跨行发送。如果您想使用较旧的编译器进行操作,则可以删除 CLASS 定义。但是您必须编写代码来手动处理任何引用 CLASS 或该类的信息对象的约束。
    【解决方案2】:

    BinaryNotes 不支持新的 ASN.1 类语法,抱歉! 也不支持CODE global:{org(0) operA(1) ver(1) id(1)} 您可以像这样尝试基本的 ASN.1:

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

    【讨论】:

    • 谢谢。我在想你建议的东西,但我/我不确定我是否应该使用 SEQUENCE 而不是 CLASS。再次感谢你。
    • 没问题,但你必须知道 BinaryNotes 只支持基本的通用 ASN.1 语法(其实我是这个框架的作者 :))
    • 很抱歉,您停止了框架的开发 :)
    • 是的,你说得对,但我不再使用 ASN.1。这是旧的电信域。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多