Ошибка декодирования ASN.1

Я использую Objective System Inc(http://www.obj-sys.com/products/asn1c/index.php) ASN.1 Compiler и файл спецификации (cdr_spec.asn) сгенерировали исходный код Java. CDRS кодируются на основе формата BER (основное правило кодирования).

Команда для создания исходного кода 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, помочь мне в этом?


person Haifeng Zhang    schedule 02.06.2015    source источник


Ответы (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 в спецификации, перегенерировать код и повторить попытку.

Кроме того, вы всегда можете обратиться за помощью к поставщикам программного и/или аппаратного обеспечения.

person Ethan    schedule 03.06.2015
comment
спасибо за Ваш ответ. Наконец-то я разобрался, перевозчик предоставил неправильный файл спецификации, он потерял несколько переменных... как это могло быть... еще раз спасибо - person Haifeng Zhang; 03.06.2015
comment
Это происходит постоянно — поставщики выпускают несколько версий своих спецификаций и не всегда обновляют их должным образом. Очень часто можно найти такие ошибки в дикой природе. Многие поставщики также настраивают свой вывод, чтобы его было труднее читать с помощью стандартизированных инструментов (например, добавляя заголовки произвольной длины). - person Ethan; 03.06.2015