Asn1Compiler
|
Asn1Compiler inclut les nouveaux types Time définis par l'Amendement 3 à X680 permettant un support complet des types de temps spécifiés par l'ISO 8601-2004. Asn1Compiler supporte les règles d'encodage Extended-XER. Ces nouvelles règles permettent d'encoder et de décoder des documents "full XML" en traitant toutes les spécificités de XML (attributs, namespaces...). Asn1Compiler pour Java supporte les nio. |
Voir les Release Notes pour les dernières évolutions.
Le compilateur ASN.1
Le compilateur Asn1Compiler génère les classes Java/C# issues d'un schéma ASN.1.
Il prend en entrée un schéma ASN.1 (un ou plusieurs fichiers ASN.1) et génère :
- les messages signalant d'éventuelles erreurs dans la syntaxe ;
- les classes Java ou C# associées aux définitions du schéma.
Le compilateur est conforme aux normes ASN.1 1997/2002 suivantes :
- Spécification de la notation de base (UIT-T X.680 / ISO/CEI 8824-1)
- Spécification des objets informationnels (UIT-T X.681 / ISO/CEI 8824-2)
- Spécification des contraintes (UIT-T X.682 / ISO/CEI 8824-3)
- Paramétrage des spécifications (UIT-T X.683 / ISO/CEI 8824-4)
Asn1Compiler prend en compte les classes d'objets informationnels, les ensembles d'objets informationnels et les contraintes relationnelles de façon à ce que les valeurs de type ouvert puissent être encodées et décodées automatiquement au moment de l'exécution. L'utilisateur n'a pas besoin d'écrire de code supplémentaire.
Asn1Compiler est une application pure Java. Il s'installe sur toute machine (Windows, Unix, Linux...) supportant une machine virtuelle Java.
Voici quelques particularités d'Asn1Compiler :
- configuration via un fichier texte ;
- génération de code pur Java ou C# ;
- création d'un package Java ou d'un namespace C# par module ASN.1 ;
- génération de classes documentées (formats javadoc et documentation XML .NET) ;
- prise en compte automatique des classes d'objets informationnels et des ensembles d'objets informationnels dans les contraintes relationnelles pour permettre le décodage des types "ouverts" sans besoin de code supplémentaire ;
- prise en compte automatique des contraintes de contenu sur les BIT STRING et OCTET STRING ainsi que des contraintes de sous-typage sur les types "ouverts" pour permettre le décodage des types contenus sans besoin de code supplémentaire ;
- prise en compte des PDU "énormes" (le cas de TAP3 par exemple où les PDUs peuvent atteindre 200 Mo) avec un mode de décodage sur les types SET OF/SEQUENCE OF permettant d'économiser la mémoire ;
- génération automatique de fichiers d'exemples permettant d'encoder et de décoder les types ASN.1 choisis dans la syntaxe en tenant compte des contraintes. Cette fonctionalité offre un moyen puissant pour développer rapidement vos applications.
Le runtime
Le runtime est une librairie pure Java ou C#. Il regroupe les primitives d'encodage et de décodage des types de base.
Les règles d'encodage supportées par le runtime sont :
- Spécification des règles de codage de base (BER/DER, UIT-T X.690 / ISO/CEI 8825-1)
- Spécification des règles de codage compact (PER aligné et non aligné, UIT-T X.691 / ISO/CEI 8825-2)
- Spécification des règles de codage XML (Basic XER/Canonical XER/Extended XER, UIT-T X.693 + Amendement-1 / ISO/8825-4)
Le runtime offre de nombreuses caractéristiques parmi lesquelles :
- la possiblité de changer de règles d'encodage en changeant d'instance de decodeur/encodeur ;
- la fourniture d'un diagnostic d'erreur compréhensible ;
- le support de la "sérialisation" ;
- le support pour les fonctions clone/equals/hashcode/toString.
Un exemple
Voici un exemple de génération qui suppose que la description des structures de données se trouve dans le fichier sample.asn1 :
SampleModule
DEFINITIONS AUTOMATIC TAGS ::= BEGIN MainStruct ::= SEQUENCE { name IA5String, age INTEGER } END
La génération est décrite dans un fichier de configuration sample.arg :
- le nom de l'API générée est "Sample" ;
- les règles d'encodage désirées sont ExtendedXER et AlignedBasicPER ;
- l'API produite cible le langage Java (ou cSharp) ;
- par défaut, les sources seront générés dans Sample/src/java (ou Sample/src/cSharp).
# specify the asn1 files
asn1ToXml.inputFile.1=sample.asn1 # specify the Asn1API name
asn1API.name=Sample # lists the encoding rules to be used
asn1API.encodingRules=ExtendedXER, AlignedBasicPER # specify the language (Java or C#)
javaGenerator=true
#cSharpGenerator=true
La commande permettant la génération est :
Asn1Compiler sample.arg
Le résultat est :
- compilation in progress... - # input file : sample.asn1 - 1 ASN.1 module compiled : 0 errors, 0 warnings. - Java source code generation... - ASN.1 module : SampleModule - writing generation... - source code generation complete (7 files created).
L' exemple d'utilisation de l'API générée est fourni ici.

ASN.1 Solutions