【问题标题】:ASN.1 Decode ErrorASN.1 解码错误
【发布时间】:2015-06-02 16:24:19
【问题描述】:

我正在使用 Objective System Inc(http://www.obj-sys.com/products/asn1c/index.php) ASN.1 Compiler 和规范文件 (cdr_spec.asn) 生成的 Java 源代码。 CDRS 是根据格式 BER(Basic Encoding Rule) 编码的

生成Java源码的命令:

./asn1c cdr_spec.asn -java -ber -reader -print -getset -pkgname com.testpkg

源码生成:

ASN1C Compiler, Version 6.4.5
Copyright (c) 1997-2011 Objective Systems, Inc. All Rights Reserved.

Registered to: XXXXXX
Parsing ASN.1 definitions..

Generating Java source files for module XXX-XXX..

当我解码第一个 CDR 文件时,它只解析 3 行,CDR 文件应该包含超过 100 行,所以它被部分解码。

当我尝试解码另一个 CDR 文件时,它在解码 CDR 文件时失败并给我这样的错误

com.objsys.asn1j.runtime.Asn1MissingRequiredException: ASN.1 decode error @ offset 832:
SEQUENCE or SET is missing a required element.
10:11:30.394 [main] ERROR com.testpkg.Test - ASN.1 decode error @ offset 832:
SEQUENCE or SET is missing a required element.

当我使用工具检查其语法时,我的 ASN.1 规范文件没有任何语法错误。

任何了解 ASN.1 的人都可以帮助我解决这个问题吗?

【问题讨论】:

    标签: java asn.1 ber


    【解决方案1】:

    当我尝试解码另一个 CDR 文件时,它在解码 CDR 文件时失败并给我这样的错误:

    com.objsys.asn1j.runtime.Asn1MissingRequiredException: ASN.1 decode error @ offset 832: SEQUENCE or SET is missing a required element.
    10:11:30.394 [main] ERROR com.testpkg.Test - ASN.1 decode error @ offset 832:
    SEQUENCE or SET is missing a required element.
    

    根据您的描述,问题似乎出在输入数据上,而不是实际规格本身。供应商提供与其硬件产生的数据不完全一致的规范并不罕见。

    如果您能识别出缺少哪个元素,您可以随时尝试在规范中标记字段OPTIONAL,重新生成代码,然后重试。

    或者,您可以随时联系软件和/或硬件供应商寻求帮助。

    【讨论】:

    • 感谢您的回答。终于弄明白了,承运人提供了错误的规格文件,丢失了几个变量……怎么可能……再次感谢
    • 这种情况一直在发生——供应商发布了多个版本的规范,但并不总是保持适当的更新。在“狂野”中发现这类错误是很常见的。许多供应商还定制他们的输出,使其更难使用标准化工具阅读(例如,通过添加自定义长度标题)。
    猜你喜欢
    • 2014-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多