问题描述
|
我拼命寻找一个ASN.1编译器,该编译器将成功解析我从客户那里获得的预定义ASN.1定义。
到目前为止,所有产品(免费或商用)都无法解析该定义,该定义基于XER并且具有一些短暂的RXER依赖关系-当我手动指定相关的ASN.1-deFinitions(取自RFC)时,编译器还将发出解析器错误。
相关的代码行是(简化的):
MYMSG ::= SEQUENCE
{
msgiD [ATTRIBUTE] [250] UTF8String OPTIONAL,msgType UTF8String
}
每个编译器都抱怨[ATTRIBUTE]令牌,因此我发现它是RFC 4912中定义的ASN.X规范的一部分,并且还依赖于RFC 4910中对RXER的支持,另请参阅X.680-1。
问题是我尝试的每个编译器似乎都不支持这些编码模式,并且无法解析RFC中提到的定义,例如对于RXER和使用此编码的所有定义,我得到:
\“ RXER.asn \”,第20行
(其他基本定义):A1139W:
默认编码参考\'RXER \'
用于模块
\'AdditionalBasicDeFinitions \'是
未知和所有编码说明
在此标识的模块内
编码参考将被忽略。
RXER说明
(注意:所有相关模块,例如ASN.X,都在\“ DEFinitioNS \”标签之后立即包含指令\“ RXER INSTRUCTIONS \”,我尝试过的任何编译器都无法理解该指令)。
我尝试过openasn1(www.openasn1.org)-有趣的是,我在由openasn1生成的代码中有一些旧的且部分起作用的Java映射对象! -http://lionet.info/asn1c/asn1c.cgi上的在线编译器,以及http://www.obj-sys.com/Cnge641Dwld/acv64kits.PHP上的各种商业工具,例如Objective Systems ASN1C v6.4.1(甚至具有当前的Eclipse插件),Marben http://www.marben-products.com/asn.1/tce_java.html和unigone http://www.unigone.com/zh/products/Asn1Compiler/description
我总是收到类似于以下的错误:
ASN.1 grammar parse error near line 13 (token \"ATTRIBUTE\"): parse error,unexpected TOK_capitalreference,expecting TOK_number
我是否缺少明显的东西,例如IMPORT或其他定义/编译器标志?
解决方法
我设法编译了模式并生成了所需的Java映射类。我必须使用商业OSS Nokalva编译器,因为我尝试过的所有免费工具都无法在(E)XER编码模式上使用。
我收到的架构中也有一些错误,所以这是我必须要做的:
首先,我在DEFINITIONS行中添加了XER指令以及常用的标签
指示:
定义XER指令自动标记:: =
在页脚中,我添加了XER编码指令:
编码控制XER全局默认值
修改编码
使用XER编码时,必须明确指定标签,以避免语法上的歧义:
[属性] [标签:0]
而不是模棱两可的定义
[属性] [0]
所有这些问题都可以通过参考有关EXER编码的一篇不错的文章得到解决,绝对值得一读,并感谢Nokalva提供的有用文档!