TOP

What's New in the OSS ASN.1 Tools for Java

Applies to: ASN.1/Java v8.7

What's New in ASN.1/Java 8.7

Improvements

The following changes have been made to the ASN.1 compiler:

  • All reference type fields are now omitted when a reference type is used in the COMPONENTS OF Type notation of a field that appears after the extension marker within another reference type used in the COMPONENTS OF Type notation after the extension marker, as required by the ASN.1 standard.
  • PDU types that include nested types with ALL EXCEPT constraints within inner subtypes are now correctly handled when creating sample values. Previously, COMPILER ERROR #9 or other error messages could be issued.
  • ASN.1 values of BIT STRING types with named bit lists and size constraints are now correctly handled when the values are defined using one or more identifiers from the parent type list. These values can be present within the DEFAULT syntax, within a single value constraint, or nested within other values.
    The generated values now have the smallest possible length permitted by the size constraint, which includes the largest bit value from identifiers specified in the ASN.1 value definition. If the smallest length is greater than the largest bit value, the value is padded with trailing zero bits until it reaches the smallest length.
  • A warning is now issued when the same symbol is imported multiple times from the same module and the -designerWarnings command-line option is specified. Previously, duplicate symbols were silently ignored.
  • Java classes for PDU types used in the DEFAULT syntax applied to VariableTypeFields inside information object classes are now generated by the ASN.1 compiler within the package that matches the ASN.1 module where the information object class definition is located. Previously, some Java classes were generated in the wrong package and couldn't pass Java compilation. The new compat flag v8.6PdusForTypesFromDEFAULTInsideInfoObjClass can be used to restore the old behavior.

In addition, the ASN.1/Java Tools now includes ASN.1 Studio release 10.5.


What's New in ASN.1/Java 8.6

New Features

The ASN.1 Standards repository now includes ASN.1 specifications for 3GPP Release 17, as follows:

  • 5g_e1ap_r17 TS 37.483 V17.1.0 (2022-06)
  • 5g_f1ap_r17 TS 38.473 V17.1.0 (2022-06)
  • 5g_ngap_r17 TS 38.413 V17.1.1 (2022-06)
  • 5g_rrc_r17 TS 38.331 V17.1.0 (2022-07)
  • 5g_xnap_r17 TS 38.423 V17.1.0 (2022-06)
  • lte_lcsap_r17 TS 29.171 V17.0.0 (2022-03)
  • lte_lppa_r17 TS 36.455 V17.0.0 (2022-04)
  • lte_m2ap_r17 TS 36.443 V17.0.1 (2022-04)
  • lte_m3ap_r17 TS 36.444 V17.0.0 (2022-04)
  • lte_rrc_cv2x_r17 TS 36.331 V17.1.0 (2022-07)
  • lte_rrc_nb_iot_r17 TS 36.331 V17.1.0 (2022-07)
  • lte_rrc_r17 TS 36.331 V17.1.0 (2022-07)
  • lte_s1ap_nb_iot_r17 TS 36.413 V17.1.0 (2022-06)
  • lte_s1ap_r17 TS 36.413 V17.1.0 (2022-06)
  • lte_sbcap_r17 TS 29.168 V17.1.0 (2021-12)
  • lte_slmap_r17 TS 36.459 V17.0.0 (2022-04)
  • lte_x2ap_nb_iot_r17 TS 36.423 V17.1.0 (2022-06)
  • lte_x2ap_r17 TS 36.423 V17.1.0 (2022-06)
  • lte_xwap_r17 TS 36.463 V17.0.0 (2022-04)
  • umts_rrc_r17 TS 25.331 V17.1.0 (2022-07)

The ASN.1 Basic repository now includes samples for binary to CSV and JSON formats.


What's New in ASN.1/Java 8.5.0.1

New Features

The Runtime API documentation has been updated with a version generated by the JDK 17 JavaDoc tool program.


What's New in ASN.1/Java 8.5

New Features

New ASN.1 Value Notation feature
  • The new -avn command line option is added. This option instructs the compiler to generate additional Java code that is required for the ASN.1 value notation (AVN) reader. The value notation reader is a runtime class that is used to parse ASN.1 value notation into Java objects that represent those values. The -avn option requires the osstoed.jar class library at runtime.
  • The new com.oss.asn1.ValueNotationReader and AVNInput API classes are added to the TOED runtime library (osstoed.jar). The ValueNotationReader class can be used to create data objects from their ASN.1 value notation text representations. To enable ASN.1 value notation parsing at runtime, compile the ASN.1/Java project with the -avn command line option. An instance of the AVN parser can then be obtained fron the project main class using the getValueNotationReader() static method:
    ValueNotationReader parser = Project.getValueNotationReader();
    Reading a single value or value assignment from a string can be accomplished by invoking the read-methods of the parser. The following methods return an instance of the AbstractData class:
    value = parser.readValue(string, new TypeOfTheValue());
      or
    value = parser.readValueAssignment(string);
    The latter method relies on the PDU type name that is specified in the input string.

    To read multiple values or value assignments from a single input, which can be an instance of the java.lang.String or Reader class, an instance of the AVNInput class is created. For example
    AbstractData data;
    AVNInput input = new AVNInput(reader);
    while (data = parser.readValue(input, new Type()) != null)
        System.out.println("data " + data);
    NOTE: The ASN.1 value notation parser is a chargeable feature in non-evaluation licenses. Contact Sales to obtain pricing information.
New methods and classes
  • The new "boolean isUnknownExtensionFound()" method has been added to the com.oss.asn1.Coder class. The method returns true when an unknown extension was found by the last invocation of the decode() method.
  • The Binary2JSONConvertor (TOED|SOED) and JSON2BinaryConvertor (TOED|SOED)classes have been introduced to avoid confusion with binary to text and text to binary conversions. Previously, JSON to or from binary conversions required using the Binary2XMLConvertor or XML2BinaryConvertor classes.
  • The new com.oss.asn1.Binary2CSVConvertor API class hes been added to the SOED runtime library (oss.jar). This class enables you to convert binary encodings to CSV in one step.
New compiler option

The compiler will now recognize the new -2021 option. The existing -2015 option is now an alias of the -2021 option. Also, the ASN1.Version compiler directive will now accept '2021' as an argument.

Improvements

  • The com.oss.util.ByteTool class toIPAddress() and parseIPAddress() static methods have been enhanced to support version 6 IP addresses. The toIPAddress() method converts a binary IP address in a byte array to textual form in a string. It uses the byte array length to distinguish between a 4-byte V4 IP address and a 16-byte V6 IP address. The parseIPAddress() method is used to convert IP addresses from strings to 4-byte or 16-byte byte arrays.
  • The ASN.1 compiler has been fixed to correctly process non-parameterized types that include nested references to not-yet-defined parameterized types, imported using WITH SUCCESSORS, and used inside actual parameters with inner subtype constraints in instances of parameterized types. Previously, warnings or errors in the non-relaxed mode about Parameterized<X> not being processed were issued. The new compat flag, v8.4ForwardedNonParamReferencesImportedWithSuccessors, can be used to restore the old behavior of the ASN.1 compiler.
  • The ASN.1 compiler will now correctly match a type with contents constraints inside an open type value with a corresponding type in the information object set specified in the component relation constraint. Previously, a new artificial PDU type was created for such open type values, which caused constraint violation errors. The new compat flag, v8.4ContentsConstraintInsideOpenTypeValue, can be used to restore the old behavior.

What's New in ASN.1/Java 8.4

New Features

New CSV conversion feature

The ASN.1/Java Tools now supports the conversion of Java objects to CSV format.

  • The new -csv compiler option is introduced. This option enables access to the CSVTool utility that can convert Java objects to CSV format. The new -csv option can be used only with the -soed compiler option, the -csv option is ignored when used with -toed or -lean.
  • The new CSVTool utility class is implemented. This class defines the API to convert Java objects to CSV format, including the API that permits customization of various CSV formatting options.

New methods

New utility methods have been added to the com.oss.util.ByteTool class in the SOED, lean and TOED runtimes:
    public static String toTAP3BCD(byte[] tap3Bcd);
    public static byte[] parseTAP3BCD(String tap3Bcd);
    public static String toTBCD(byte[] tbcd);
    public static byte[] parseTBCD(String tbcd);
These new methods enhance the ByteTool to support the TAP3 Binary-Coded Decimal and Telephony Binary-Coded Decimal encodings.

New samples

A new sample has been created for the IEEE 1609.2 specification. This sample demonstrates how to construct, sign, and verify a signed Ieee1609Dot2Data using the java.security API.

A new sample has been created for release 16 of the UMTS RRC protocol:

  • TS 38.331 (umts_rrc_r16) V16.1.0 (2020-07)

Samples for releases 14, 15, and 16 of the LTE and 5G protocols have been updated to use the most recent versions of ASN.1 schemas available:

  • TS 38.463 (5g_e1ap_r15) V15.8.0 (2020-10)
  • TS 38.463 (5g_e1ap_r16) V16.5.0 (2021-04)
  • TS 38.473 (5g_f1ap_r15) V15.13.0 (2021-03)
  • TS 38.473 (5g_f1ap_r16) V16.4.1 (2021-03)
  • TS 38.413 (5g_ngap_r15) V15.11.0 (2021-04)
  • TS 38.413 (5g_ngap_r16) V16.5.0 (2021-04)
  • TS 38.331 (5g_rrc_r15) V15.13.0 (2021-03)
  • TS 38.331 (5g_rrc_r16) V16.4.1 (2021-03)
  • TS 38.423 (5g_xnap_r15) V15.11.0 (2021-04)
  • TS 38.423 (5g_xnap_r16) V16.5.0 (2021-04)
  • TS 29.171 (lte_lcsap_r15) V15.5.1 (2021-03)
  • TS 29.171 (lte_lcsap_r16) V16.2.0 (2020-12)
  • TS 36.455 (lte_lppa_r16) V16.1.0 (2021-04)
  • TS 36.443 (lte_m2ap_r16) V16.1.0 (2020-10)
  • TS 36.331 (lte_rrc_cv2x_r14) V14.16.0 (2021-01)
  • TS 36.331 (lte_rrc_cv2x_r15) V15.16.0 (2021-03)
  • TS 36.331 (lte_rrc_cv2x_r16) V16.4.0 (2021-03)
  • TS 36.331 (lte_rrc_nb_iot_r14) V14.16.0 (2021-01)
  • TS 36.331 (lte_rrc_nb_iot_r15) V15.16.0 (2021-03)
  • TS 36.331 (lte_rrc_nb_iot_r16) V16.4.0 (2021-03)
  • TS 36.331 (lte_rrc_r14) V14.16.0 (2021-01)
  • TS 36.331 (lte_rrc_r15) V15.16.0 (2021-03)
  • TS 36.331 (lte_rrc_r16) V16.4.0 (2021-03)
  • TS 36.413 (lte_s1ap_nb_iot_r15) V15.10.0 (2020-10)
  • TS 36.413 (lte_s1ap_nb_iot_r16) V16.5.0 (2021-04)
  • TS 36.413 (lte_s1ap_r15) V15.10.0 (2020-10)
  • TS 36.413 (lte_s1ap_r16) V16.5.0 (2021-04)
  • TS 36.423 (lte_x2ap_nb_iot_r15) V15.11.0 (2020-10)
  • TS 36.423 (lte_x2ap_nb_iot_r16) V16.5.0 (2021-04)
  • TS 36.423 (lte_x2ap_r15) V15.11.0 (2020-10)
  • TS 36.423 (lte_x2ap_r16) V16.5.0 (2021-04)

Improvements

  • The ASN.1 compiler now issues a warning when an untagged open type appears before the extension marker in an extensible type, which is in violation of the tag uniqueness requirement (see X.680 clauses 25.7, 52.7.3, 52.7.4, X.681 14.2b) NOTE 2).
  • The ASN.1 compiler no longer issues the A0413E error message when non-relaxed mode is used or the A0413W warning message when relaxed mode is used when a parameterized reference is present in an IMPORTS statement that does not include the optional {} and an inner subtype constraint is applied to an imported type defined in a module added before the module in which the parameterized type is defined. Previously, the message indicated that the parameterized reference was undefined. See the following example:
    EfcCcc DEFINITIONS AUTOMATIC TAGS ::= BEGIN
    IMPORTS  LPN FROM EfcDsrcApplication
                   Get-Response  FROM EfcDsrcGeneric;
        CCC-DataRetrieval-Response::= Get-Response {BOOLEAN}
        VehicleLicensePlateNumber ::= LPN (WITH COMPONENTS {..., licencePlateNumber(SIZE(14))})
    END
    
    EfcDsrcApplication DEFINITIONS AUTOMATIC TAGS ::= BEGIN
        LPN::= SEQUENCE {
            licencePlateNumber OCTET STRING
        }
    END
    
    EfcDsrcGeneric DEFINITIONS AUTOMATIC TAGS ::= BEGIN
        Get-Response{Container}::= SEQUENCE {
            eid INTEGER,
            iid Container OPTIONAL
        }
    END
  • The ASN.1 compiler no longer issues the A0482E error message when non-relaxed mode is used or the A0482W warning message when relaxed mode is used for an external reference present in a module object identifier and included in an IMPORTS statement. Previously, the ASN.1 compiler could issue COMPILER ERROR #22 when the imported module was not defined. See the following example:
    A {0 2 2} DEFINITIONS ::= BEGIN
         i INTEGER ::= 3
    END
    
    B {0 2 3 0} DEFINITIONS ::= BEGIN
         I ::= INTEGER
    END
    
    C DEFINITIONS ::= BEGIN
    IMPORTS i FROM A {0 2 2}
                     I FROM B {0 2 A.i 0};
        v I ::= 23
    END
  • The ASN.1 compiler will no longer issue the A0070S error that a circular reference is not allowed in some cases when parameterized types are used as instances of dummy parameters inside an inner subtype constraint and imported from modules WITH SUCCESSORS that are not yet defined.
  • Non-compilable Java code was generated for some parameterized type definitions when the -paratypesuperclass compiler option was used. Specifically, the bug affected parameterized types that contained a field with a DEFAULT value specification in the CAP/MAP/TCAP schema.

What's New in ASN.1/Java 8.3.1

New Features

The OSS ASN.1 Tools for Java now includes ASN.1 Studio 10.1. For a summary of the improvements in ASN.1 Studio 10.1, see the Enhancements History section.


What's New in ASN.1/Java 8.3

New Features

New argument

The Java compiler now accepts the [<selector>:]<prefix> syntax as an argument for the -prefix option, where selector can be one of "package", "class" or "var". See the following examples:

  • -prefix OSS will apply the "OSS" prefix to packages, classes, and public member variables (equivalent to -prefix package:OSS -prefix class:OSS -prefix var:OSS).
  • -prefix class:OSS will apply the "OSS" prefix to the names of classes only.
  • -prefix OSS -prefix var:oss will apply the "OSS" prefix to classes and packages and the "oss" prefix to public member variables.
New utility

The new com.oss.util.BERTool class provides a Type-Length-Value (TLV) Print Utility application and a set of nested utility classes for parsing or printing BER/DER encoded data. The TLV Print Utility application is similar to the previously available "osstlv" native executable. To run the application use the following command:

     java -jar <install dir>/bin/osstlv.jar

where <install dir> is the directory where the OSS ASN.1 Tools for Java is installed.

Refer to the online API documentation for further information on the BERTool class and its nested classes (OSS TOED API, OSS SOED API).

New samples

New samples have been created for release 16 of the LTE and 5G protocols:

  • TS 38.331 (5g_rrc_r16) V16.1.0 (2020-07)
  • TS 29.171 (lte_lcs_r16) V16.0.0 (2020-07)
  • TS 36.455 (lte_lppa_r16) V16.0.0 (2020-07)
  • TS 36.443 (lte_m2ap_r16) V16.0.0 (2020-03)
  • TS 36.444 (lte_m3ap_r16) V16.0.0 (2020-07)
  • TS 36.331 (lte_rrc_cv2x_r16) V16.1.1 (2020-07)
  • TS 36.331 (lte_rrc_nb_iot_r16) V16.1.1 (2020-07)
  • TS 36.331 (lte_rrc_r16) V16.1.1 (2020-07)
  • TS 29.168 (lte_sbcap_r16) V16.0.0 (2020-07)
  • TS 36.459 (lte_slmap_r16) V16.0.0 (2020-07)
  • TS 36.463 (lte_xwap_r16) V16.0.0 (2020-07)

Samples for releases 14, 15, and 16 of the LTE and 5G protocols have been updated to use the most recent versions of ASN.1 schemas available:

  • TS 38.463 (5g_e1ap_r15) V15.7.0 (2020-07)
  • TS 38.463 (5g_e1ap_r16) V16.2.0 (2020-07)
  • TS 38.473 (5g_f1ap_r15) V15.10.0 (2020-07)
  • TS 38.473 (5g_f1ap_r16) V16.2.0 (2020-07)
  • TS 38.413 (5g_ngap_r15) V15.8.0 (2020-07)
  • TS 38.413 (5g_ngap_r16) V16.2.0 (2020-07)
  • TS 38.331 (5g_rrc_r15) V15.9.0 (2020-03)
  • TS 38.423 (5g_xnap_r15) V15.10.0 (2020-07)
  • TS 38.423 (5g_xnap_r16) V16.2.0 (2020-07)
  • TS 29.171 (lte_lcs_r15) V15.4.0 (2020-07)
  • TS 36.331 (lte_rrc_cv2x_r14) V14.14.0 (2020-07)
  • TS 36.331 (lte_rrc_cv2x_r15) V15.10.0 (2020-07)
  • TS 36.331 (lte_rrc_nb_iot_r14) V14.14.0 (2020-07)
  • TS 36.331 (lte_rrc_nb_iot_r15) V15.10.0 (2020-07)
  • TS 36.331 (lte_rrc_r14) V14.14.0 (2020-07)
  • TS 36.331 (lte_rrc_r15) V15.10.0 (2020-07)
  • TS 36.413 (lte_s1ap_nb_iot_r15) V15.9.0 (2020-07)
  • TS 36.413 (lte_s1ap_nb_iot_r16) V16.2.0 (2020-07)
  • TS 36.413 (lte_s1ap_r15) V15.9.0 (2020-07)
  • TS 36.413 (lte_s1ap_r16) V16.2.0 (2020-07)
  • TS 36.423 (lte_x2ap_nb_iot_r15) V15.10.0 (2020-07)
  • TS 36.423 (lte_x2ap_nb_iot_r16) V16.2.0 (2020-07)
  • TS 36.423 (lte_x2ap_r15) V15.10.0 (2020-07)
  • TS 36.423 (lte_x2ap_r16) V16.2.0 (2020-07)

The cam_denm sample has been updated to use the most recent version of the ASN.1 schema:

  • CAM - ETSI EN 302 637-2 V1.4.1 (2019-04)
  • DENM - ETSI EN 302 637-3 V1.3.1 (2019-04)
  • ITS-Container - ETSI TS 102 894-2 V1.3.1 (2018-08)


What's New in ASN.1/Java 8.2

New Features

New compiler directives

The OSS.NOENCODE and OSS.NODECODE compiler directives reduce the generated TOED code by excluding the encoding or decoding routines for the directive's operand. Under certain conditions, the generated code can be reduced even further using the new -compactNoDecode compiler option.

New compiler option

The -compactNoDecode compiler option instructs the compiler to generate a compact version of Time-Optimized Decoder code for fields marked by the NODECODE directive.

New samples

New samples for release 16 of LTE and 5G protocols have been created:

  • TS 38.463 (5g_e1ap_r16) V16.0.0 (2020-01)
  • TS 38.473 (5g_f1ap_r16) V16.0.0 (2020-01)
  • TS 38.413 (5g_ngap_r16) V16.0.0 (2020-01)
  • TS 38.423 (5g_xnap_r16)V16.0.0 (2020-01)
  • TS 36.413 (lte_s1ap_nb_iot_r16) V16.0.0 (2020-01)
  • TS 36.413 (lte_s1ap_r16) V16.0.0 (2020-01)
  • TS 36.423 (lte_x2ap_nb_iot_r16) V16.0.0 (2020-01)
  • TS 36.423 (lte_x2ap_r16) V16.0.0 (2020-01)

Samples for releases 13, 14, and 15 of LTE and 5G protocols have been updated to use the most recent versions of ASN.1 schemas available:

  • TS 38.463 (5g_e1ap_r15) V15.5.0 (2019-10)
  • TS 38.473 (5g_f1ap_r15) V15.7.0 (2019-10)
  • TS 38.413 (5g_ngap_r15) V15.5.0 (2019-10)
  • TS 38.331 (5g_rrc_r15) V15.7.0 (2019-09)
  • TS 38.423 (5g_xnap_r15) V15.5.0 (2019-10)
  • TS 29.171 (lte_lcs_r14) V14.3.0 (2019-09)
  • TS 29.171 (lte_lcs_r15) V15.3.0 (2019-09)
  • TS 36.455 (lte_lppa_r15) V15.2.1 (2019-01)
  • TS 36.331 (lte_rrc_cv2x_r14) V14.12.0 (2019-09)
  • TS 36.331 (lte_rrc_cv2x_r15) V15.7.0 (2019-09)
  • TS 36.331 (lte_rrc_nb_iot_r13) V13.14.0 (2019-06)
  • TS 36.331 (lte_rrc_nb_iot_r14) V14.12.0 (2019-09)
  • TS 36.331 (lte_rrc_nb_iot_r15) V15.7.0 (2019-09)
  • TS 36.331 (lte_rrc_r13) V13.14.0 (2019-06)
  • TS 36.331 (lte_rrc_r14) V14.12.0 (2019-09)
  • TS 36.331 (lte_rrc_r15) V15.7.0 (2019-09)
  • TS 36.413 (lte_s1ap_nb_iot_r13) V13.8.0 (2018-09)
  • TS 36.413 (lte_s1ap_nb_iot_r14) V14.9.0 (2019-07)
  • TS 36.413 (lte_s1ap_nb_iot_r15) V15.7.1 (2019-10)
  • TS 36.413 (lte_s1ap_r13) V13.8.0 (2018-09)
  • TS 36.413 (lte_s1ap_r14) V14.9.0 (2019-07)
  • TS 36.413 (lte_s1ap_r15) V15.7.1 (2019-10)
  • TS 36.423 (lte_x2ap_nb_iot_r13) V13.8.0 (2019-10)
  • TS 36.423 (lte_x2ap_nb_iot_r14) V14.8.0 (2019-10)
  • TS 36.423 (lte_x2ap_nb_iot_r15) V15.7.0 (2019-10)
  • TS 36.423 (lte_x2ap_r13) V13.8.0 (2019-10)
  • TS 36.423 (lte_x2ap_r14) V14.8.0 (2019-10)
  • TS 36.423 (lte_x2ap_r15) V15.7.0 (2019-10)
  • TS 25.331 (umts_rrc_r15) V15.4.0 (2018-09)

Improvements

Improved UTF8String API

The API for UTF8String is now streamlined and made uniform across all available representations of this ASN.1 type. Also, support for supplementary Unicode characters, such as emoji symbols, is enhanced in all representations of UTF8String.

The SOED and TOED compilers now generate an identical set of constructors for all representations of the UTF8String ASN.1 type:

  • The constructor that initializes an instance from UTF-8 bytes (byte[]).
  • The constructors that initialize an instance from UTF-16 characters (String, char[]).
  • The constructor that initializes an instance from an array of Unicode codepoints (int[]).

The SOED and TOED runtimes now define an identical set of getter and setter methods for all representations of the UTF8String ASN.1 type:

  • The getter methods that present the value as UTF-8 bytes, UTF-16 characters, or as an array of 32-bit Unicode codepoints:
    public byte[] byteArrayValue();
    public char[] charArrayValue();
    public String stringValue();
    public int[] intArrayValue();
  • The setter methods that initialize the value from UTF-8 bytes, UTF-16 characters, or from an array of 32-bit Unicode codepoints:
    public void setValue(byte[]);
    public void setValue(char[]);
    public void setValue(String);
    public void setValue(int[]);
  • The getSize() method that returns the number of 32-bit Unicode codepoints in a UTF8String:
    public int getSize()
  • The getChar() method that retrieves the i-th 32-bit Unicode codepoint from a UTF8String value:
    public int getChar(int i)

The confusing behavior of the API with an --<UNBOUNDED>-- representation of UTF8String is eliminated:

  • The constructor and the setter methods no longer expect that the String or char[] argument specifies UTF-8 bytes rather than UTF-16 characters. Use the constructor or the setter with the byte[] argument to initialize the value from UTF-8 bytes.
  • The stringValue() and the charArrayValue() methods now return UTF-16 characters rather than values of UTF-8 bytes. Use the byteArrayValue() method to retrieve the bytes of a UTF-8 encoding.
  • The getSize() method now returns the number of 32-bit Unicode codepoints in the value rather than the number of octets in the UTF-8 encoding of the value. Use byteArrayValue().length to retrieve the length of the UTF-8 encoding.
  • The getChar() method now returns the i-th 32-bit Unicode codepoint rather that the value of the i-th byte of the UTF-8 encoding. Use byteArrayValue()[i] to retrieve the i-th byte of the UTF-8 encoding.

The --<BMPSTRING>-- representation is enhanced to support values that contain supplementary Unicode characters. Previously, when the value of a --<BMPSTRING>-- representation included a surrogate pair that represented a supplementary Unicode character, the encoding of such value was not supported.

Enhanced JIAAPI class

The JIA_ValueReader class of the JIAAPI add-on is enhanced to support parsing of arbitrary values of open types. Previously, the JIA_ValueReader class was able to parse only open types that carried values of primitive built-in ASN.1 types, such as, INTEGER, BOOLEAN, OBJECT IDENTIFIER, etc.

Other improvements
  • The ASN.1 compiler has been fixed to correctly apply the EXTENSIBILITY IMPLIED option in the module definition by making the following inextensible types defined in the module to be implicitly extensible:
    • All ENUMERATED types
    • SET, SEQUENCE, and CHOICE types whose type definitions match some other type definitions inside other modules that do not have the EXTENSIBILITY IMPLIED option
    Previously, the EXTENSIBILITY IMPLIED option did not affect the above types, which could cause incorrect PER encodings of their values at runtime. The new -allow BadExtensibilityImplied option can be used to restore the old behavior. For example, the Enum type definition in the following module is equivalent to the textual insertion of an extension marker ("...") at the end of the type definition: "ENUMERATED { a(1), b(2), ...}".
    Mod DEFINITIONS EXTENSIBILITY IMPLIED  ::= BEGIN
    Enum ::= ENUMERATED { a(1), b(2)}
    END
    Previously, due to type sharing of similar type definitions for Set and SetExt, as well as for Choice and ChoiceExt, the implicit extensibility of SetExt and ChoiceExt was lost:
    Mod DEFINITIONS AUTOMATIC TAGS ::= BEGIN
    Set ::= SET {a INTEGER, b BOOLEAN}
    Choice ::= CHOICE {a INTEGER, b BOOLEAN}
    END
    
    ModExt DEFINITIONS AUTOMATIC TAGS EXTENSIBILITY IMPLIED  ::= BEGIN
    SetExt ::= SET {a INTEGER, b BOOLEAN}
    ChoiceExt ::= CHOICE {a INTEGER, b BOOLEAN}
    END
  • The ASN.1/Java compiler generates the helper inner class with the fixed name 'Value' in the Java class that represents INTEGER with named numbers or the ENUMERATED ASN.1 type. This helper class facilitates the use of INTEGER or ENUMERATED with the Java 'switch' statement. Previously, when detecting possible name conflicts for this helper class, the compiler considered only the immediate enclosing type instead of considering all the enclosing types up to the top-level type. As a result, not all possible name conflicts were detected and the generated Java source failed to compile. For example, for the following syntax:
    Value ::= SEQUENCE {f1 INTEGER {one(1), two(2)}}
    the compiler previously generated the following code:
    public class Value extends Sequence {
    . . .
       public static class F1 extends INTEGER {
    . . .
          public static final class Value {
                public static final long one = 1;
                public static final long two = 2;
          }
    . . .
  • The ASN.1 compiler has been fixed to correctly apply ASN1.WorkingSet directives with module names without definitive module identifiers when the target module definition includes a definitive module identifier and is referenced in the IMPORTS statement with the SUCCESSOR syntax. Previously, an error about undefined types was issued in non-relaxed mode and the types from the specified working set were not included in the generated code in relaxed mode.

  • The ASN.1 compiler has been fixed to issue an error when governors of an information object set or value set used as actual parameters and the actual parameter of the paramdummy governor included in an instance of a parameterized type are not compatible. The new -allow flag, incompatibleGovernorsForObjectValueSets, can be used to suppress these errors.

    For example, the governor of the information object set, MACAlgorithms, used as the actual parameter in MessageAuthenticationCodeAlgorithm, is ALGORITHM, but it should be MAC-ALGORITHM according to the definition of the parameterized type AlgorithmIdentifier {}.
    B4468 DEFINITIONS ::= BEGIN
    
       MACAlgorithms ALGORITHM ::= {  ...   }
        MessageAuthenticationCodeAlgorithm ::=  AlgorithmIdentifier {MAC-ALGORITHM, {MACAlgorithms}}
    
        AlgorithmIdentifier {ALGORITHM-TYPE, ALGORITHM-TYPE:AlgorithmSet} ::=
          SEQUENCE {
            algorithm   ALGORITHM-TYPE.&id({AlgorithmSet}),
            parameters  ALGORITHM-TYPE.&Params({AlgorithmSet}{@algorithm})
          }
        ALGORITHM ::= CLASS {
            &id OBJECT IDENTIFIER UNIQUE,
            &Params
        }
        MAC-ALGORITHM ::= CLASS {
            &id OBJECT IDENTIFIER UNIQUE,
            &Params,
            &Other OPTIONAL
        }
    END
  • The behavior of the generated TOED constraint checker is now aligned with the behavior of the SOED constraint checker. Previously, when a component relation constraint with an extensible information object set was checked and the data did not match any row in the constraining information object set, the TOED reported a constraint violation error while the SOED ignored errors of this kind. Now the generated TOED constraint checker does not report an error in this case.

What's New in ASN.1/Java 8.1

New Features

Partial decoding for BER and DER:

The partial decoding feature is now available with BER, DER, PER, UPER, OER, and COER.
Note that BER/DER support requires osstoed.jar version 8.1+.

New samples

New samples have been created for the following:

Improvements

The ASN.1/Java TOED compiler no longer generates incorrect code in the validate() method when the constraint expression contains a union of inner subtype constraints. Previously, false validation errors occurred.

The ASN.1/Java SOED compiler no longer generates invalid type information when a type with component relation constraints is defined inline in an information object. This invalid type information caused a error in the constraint checker at run time.

The ASN.1/Java compiler now correctly compares BIT STRING type values with named bits when one of the values is specified as {}. Previously, the compiler incorrectly compared such values; consequently, a false constraint violation could be reported or a real violation could be missed. For example, a constraint violation was not reported for value y:
  Test DEFINITIONS ::= BEGIN
      EndEntityType ::= BIT STRING {app(0), enrol(1)} (SIZE (8))(ALL EXCEPT ''H)

      y EndEntityType ::= {}
  END


What's New in ASN.1/Java 8.0

New Features

The ASN.1 compiler now supports X.680 Amendment 1, which relaxes the IMPORTS clause to allow symbols to be imported from the latest module version, as indicated by the object identifier. The IMPORTS clause can now include WITH SUCCESSORS and WITH DESCENDANTS as the SelectionOption.

The ASN.1 compiler now supports the new -enablePartialDecode and -partialDecodeOnly command line options. These options are available when the -toed option is specified or implied by default. The options instruct the compiler to generate code that makes the new coder.decodePartial() TOED runtime API method available to the user. In contrast to the decode() method, the new method does not return the decoded PDU value. Instead, it invokes a user-defined callback method when decoding each field that is marked by the new OSS.DataCallback (or OSS.InfoCallback) compiler directive and optionally passes the decoded field value to it. The partial decode feature enables the user to

  • Extract data without writing code to access deeply nested fields of complex PDUs.
  • Reduce the memory footprint of applications that contain minimal information in their PDUs.

The feature is available for the PER, UPER, CPER, CUPER, OER, and COER encoding rules.

A new encoder option has been implemented for the JSON encoder. This option selects the alternate form of encoding for a BIT STRING or OCTET STRING with a contents constraint that does not include an ENCODED BY clause. The option is configured with the following JSONCoder methods:
     public void encodeContainedValuesAsText();
     public void encodeContainedValuesAsHex();

The new -userConstraintPDUs | -noUserConstraintPDUs command line options have been implemented. These options tell the compiler whether or not (the default) to generate Java classes for type parameters of the CONSTRAINED BY constraint when such types are defined inline.

The ASN.1 compiler now supports a special type of absolute reference notation that applies to the OSS compiler directives. The notation allows you to access ASN.1 types located within WITH COMPONENTS and WITH COMPONENT(inner subtype) clauses and consists of two dollar signs '$$' followed by an index number that indicates a particular WITH COMPONENTS or WITH COMPONENT clause.
The notation can be used to assign user-defined names within CONSTRAINED BY clauses that are present within an inner subtype or a compiler-generated structure (the ASN.1 compiler creates compiler-generated structures when a contents constraint is applied within an inner subtype). The rules that apply to the new notation are similar to the ones that apply to the absolute reference notation for the CONSTRAINED BY syntax.

A new encoder option that permits customization of the JSON encoder output has been implemented. The option is enabled via the new enableJSONCoderInterface() method of the JSONCoder class. To customize the JSON encoder output, the user must subclass the generated Java class using the OSS.UserClass compiler directive and implement the JSONCoderInterface in the subclass. Then, after enableJSONCoderInterface() is called, the JSON encoder will invoke the JSONCoderInterface that is implemented by the subclass to obtain customized JSON tokens that represent the value being encoded. This encoder option is currently supported only by the SOED runtime.

New samples

New samples have been created for the following:

  • The DIN EN 15722 Intelligent transport systems - ESafety - ECall minimum set of data standard. The sample demonstrates how an ECallMessage message can be created and serialized to UPER bits using the API of generated Java classes.
  • The eUICC Profile Package standard. The sample demonstrates how a eUICC Profile Package can be constructed and saved to the disk file using the API of generated Java classes.
  • The GSMA Remote SIM Provisioning standard. The sample demonstrates the invocation of the GetBoundProfilePackage function of the ES9+ interface at the SM-DP+ using the API of generated Java classes.
  • Release 15 of the UMTS RRC protocol: TS 25.331 (UMTS RRC) 15.3.0 (2018-06).
  • The Bilateral Transfer protocol (BTP): ILP-RFC 0023 Draft 4. The sample demonstrates communication between BTP peers that involves the Prepare, Fulfill, and Reject requests.

New samples for 5G NGAP, XnAP, E1AP, and F1AP protocols for 3GPP Release 15 have been created. The samples for the LTE S1AP, X2AP, M2AP, M3AP, RRC, LCSAP, LPPa, SBcAP, and XwAP protocols have been updated to 3GPP Release 15.

New samples in the advanced category have been created to explain the use of the partial decode feature:
     partial
     s1ap_pd (uses 3GPP S1AP V15.3.0 specification)

Improvements

The ASN.1 compiler has been changed to generate Java classes compatible with the TOED runtime by default. Previously, when neither -toed nor -soed was specified on the ASN.1/Java command-line, Java classes compatible with the SOED runtime were generated.

The -paramtypesuperclass option is now supported with both the SOED and TOED. Before this change it was not available with the TOED and was ignored when specified along with the -toed option.

The ASN.1 compiler and TOED runtime have been enhanced to support the DeferDecoding directive for the BER and DER encoding rules. For other encoding rules (PER, OER, XER, and JSON), the compiler generates encoders and decoders that ignore the directive and encodes or decodes the value in a single pass.


What's New in ASN.1/Java 7.2

New Features

The OSS ASN.1 Tools has been enhanced to support the Canonical Packed Encoding Rules (ALIGNED and UNALIGNED), as specified by ITU-T Recommendation X.691 (08/2015) | ISO/IEC 8825-2:2015.

Both the compiler and runtime have been enhanced to support the Java Platform Module System (JPMS), which was introduced in Java 9. The compiler now supports the '-javamodule <name>' option that packages the generated classes into the Java module with the specified <name>. The software distribution now includes an extra set of runtime libraries that are packaged as Java 9 modules. These new libraries are available in the mlib/ directory of the ASN.1/Java installation and can be used only with JDK 9.

The ASN.1 compiler now supports the UPPERCAMELCASED and LOWERCAMELCASED keywords in the NAME and TEXT JER encoding instructions. You can now describe a wider range of JSON data in an ASN.1 schema.

The public API of the JIAAPI value parser will now parse concatenated values and value assignments from an arbitrary java.io.Reader object. A relaxed parsing mode is now implemented: non-critical deviations from the expected syntax are ignored.

New samples

A new sample that demonstrates processing of 3GPP CDR files (TS 32.297) has been created. 3GPP CDR files contain a non-ASN.1 file header and non-ASN.1 record headers, while record bodies are encoded by one of the ASN.1 encoding rules (BER, PER unaligned, PER aligned, or XER). The sample shows how one can skip over non-ASN.1 content, feed ASN.1 data to the ASN.1/Java API, and convert CDR records to Java objects.

New samples have been created for release 14 of the LTE protocols and existing samples for release 12 and 13 have been updated to the most recent versions of the available ASN.1 schemas:

  • TS 29.171 (LCSAP) V13.3.0 (2017-06)
  • TS 29.171 (LCSAP) V14.1.0 (2017-06)
  • TS 36.455 (LPPA) V14.3.0 (2017-09)
  • TS 36.443 (M2AP) V13.3.0 (2016-03)
  • TS 36.443 (M2AP) V14.0.1 (2017-09)
  • TS 36.444 (M3AP) V13.2.0 (2016-03)
  • TS 36.444 (M3AP) V14.1.0 (2017-06)
  • TS 36.331 (RRC CV2X) V14.4.0 (2017-09)
  • TS 36.331 (RRC NB IOT) V13.7.1 (2017-09)
  • TS 36.331 (RRC NB IOT) V14.4.0 (2017-09)
  • TS 36.331 (RRC) V12.15.1 (2017-09)
  • TS 36.331 (RRC) V13.7.1 (2017-09)
  • TS 36.331 (RRC) V14.4.0 (2017-09)
  • TS 36.413 (S1AP NB IOT) V13.6.0 (2017-06)
  • TS 36.413 (S1AP NB IOT) V14.4.0 (2017-10)
  • TS 36.413 (S1AP) V12.7.0 (2016-03)
  • TS 36.413 (S1AP) V13.6.0 (2017-06)
  • TS 36.413 (S1AP) V14.4.0 (2017-10)
  • TS 29.169 (SBCAP) V12.10.0 (2017-09)
  • TS 29.169 (SBCAP) V13.3.0 (2017-09)
  • TS 29.169 (SBCAP) V14.1.0 (2017-09)
  • TS 36.423 (X2AP NB IOT) V13.7.0 (2017-06)
  • TS 36.423 (X2AP NB IOT) V14.4.0 (2017-09)
  • TS 36.423 (X2AP) V12.9.0 (2016-07)
  • TS 36.423 (X2AP) V13.7.0 (2017-06)
  • TS 36.423 (X2AP) V14.4.0 (2017-09)
  • TS 36.463 (XWAP) V14.2.0 (2017-06)

A new sample for release 14 of the UMTS RRC protocol has been created:

  • TS 25.331 (UMTS RRC) 14.4.0 (2017-09)

Improvements

The ASN.1/Java compiler will now automatically turn off the default -relaxedMode option when the -designerWarnings option is specified.

Type-safe getter methods have been added to the EmbeddedPDV.Identification and the External.Encoding universal classes to align the API of these classes with the API generated for CHOICE ASN.1 type:

public Syntaxes getSyntaxes();
public ObjectIdentifier getSyntax();
public INTEGER getPresentation_context_id();
public Context_negotiation getContext_negotiation();
public ObjectIdentifier getTransfer_syntax();
public Null getFixed();

public OpenType getSingle_ASN1_type();
public OctetString getOctet_aligned();
public BitString getArbitrary();


What's New in ASN.1/Java 7.1

New Features

JSON

JSON Encoding Rules support in the ASN.1/Java compiler and the SOED, TOED, and LED runtime libraries now conforms to Draft ITU-T Recommendation X.jsoner. The existing -json command-line option now instructs the compiler to enable support for X.jsoner at runtime.

The JSON codec now supports encoding instructions, specified by Draft ITU-T Recommendation X.jsoner in the SOED and TOED. The following encoding instructions are supported:

  • JER:ARRAY
  • JER:BASE64
  • JER:NAME
  • JER:OBJECT
  • JER:TEXT
  • JER:UNWRAPPED
New samples

Samples for the following LTE protocols have been created:

  • LTE LCS Application Protocol (LCS-AP) - TS 29.171 V13.2.0 (2016-03)
  • LTE Positioning Protocol A (LPPa) - TS 36.455 V13.1.0 (2016-03)
  • LTE RRC protocol to demonstrate cV2X features - TS 36.331 V14.2.2 (2017-03)

Improvements

The compiler will no longer issue a false warning for a valid type value constrained by inner subtype constraints. Also, the SOED runtime constraint checker will no longer issue false validation errors for such values.

The TOED compiler now generates a correct constraint checker for a SEQUENCE or SET type where some fields have DEFAULT values. Previously, if the value of the field was not explicitly specified, a NullPointerException could be thrown. Now, the generated code attempts to validate the implied value.

Previously, the SOED runtime constraint checker omitted any validation of a SEQUENCE or SET component when it had a DEFAULT value and the component's value was not explicitly specified. Now, the constraint checker validates such components using their DEFAULT value instead.

The SOED CER encoder will now relay an unknown extension of ENUMERATED and will not issue this confusing error message: E0124S: Unable to relay unknown extension: the extension was decoded by the Canonical Encoding Rules (CER) Coder but is relayed by the Canonical Encoding Rules (CER) Coder.


What's New in ASN.1/Java 7.0

New Features

JSON encoding rules in the SOED runtime

Support for the JSON encoding rules has been added to the SOED runtime.

Current limitations of the JSON SOED encoder/decoder:

  • The deferred decoding feature is not supported.
  • The ValueInFile feature is supported only for SET OF and SEQUENCE OF ASN.1 types.
New command-line options

The -helperAPI <param> and -noHelperAPI <param> command-line options have been added to the ASN.1 Tools for Java. These options tell the compiler to generate optional helper APIs, or not. A parameter is required that can be a single keyword or a comma-separated list of keywords. The keyword specifies the type of helper API; currently, only opentype and pdudecoder are valid.

  • The -helperAPI opentype command-line option affects the representation of open type fields that are constrained by a component relation constraint.
  • The -helperAPI pdudecoder and -noHelperAPI pdudecoder command-line options tell the compiler whether to generate optional PDU and PDU_ID classes that will be used to auto-detect and decode PDUs of unknown types from bits on the wire.
Contraint validations

Validation of the following constraints has been implemented in the TOED:

  1. Element set specification (x.680 clause 50) - EXCEPT and ALL EXCEPT
  2. Subtype elements (x.680 clause 51)
    • Permitted alphabet
    • Type constraint
    • Pattern constraint
    • Property settings
    • Duration range
    • Time point range
    • Recurrence range
  3. Other constraints
    • Table constraint
    • Component relation constraint
    • Contents constraint

Improvements

-sampleCode command-line option

The -sampleCode command line option can be specified with both the -soed and the -toed options. Before the change the -sampleCode option was ignored when specified along with the -toed option.


What's New in ASN.1/Java 6.3.1

New Features

The OSS ASN.1 Tools for Java now includes ASN.1 Studio 8.0. For a summary of the improvements in ASN.1 Studio 8.0, see the Enhancements History section.


What's New in ASN.1/Java 6.3

New Features

The following new features have been added:

Support for constraint checking in TOED
New command-line options

The -splitBigEnums #n command-line option reduces the size of a large JVM internal static initializer method by generating static _initMembers...() methods that split the large initializer into parts, which helps overcome the JVM 64K method size limit.

The -limitBigEnums #n command-line option is used when the amount of code needed to initialize named "static final" class instances that represent ENUMERATED or INTEGER with named numbers exceeds the 64K limit.

Improvements

Java class improvements

The Java classes that are generated to represent INTEGER types with named numbers now contain an inner "public static class Value" that includes a "public static final long" constant for each named number. This feature is useful when named numbers are present in the Java "switch" statement.

Method improvements

The following methods of the com.oss.asn1.Coder class (available for SOED and TOED) are used to control the whitespace generated by the XER, E-XER and JSON encoders:

  • public void enableCompact();
  • public void disableCompact();

The following methods of the com.oss.asn1.Coder class (available for TOED) are used to control the whitespace generated by the XER and JSON encoders:

  • public void setIndentWidth(int width);
  • public int getIndentWidth();

What's New in ASN.1/Java 6.2

New Features

The following new features have been added:

JSON Encoding Rules Support

The JSON Encoding Rules are currently available with the osstoed.jar runtime library and the -toed runtime option.

OER and COER Encoding Rules Support

The Octet Encoding Rules (OER) and the Canonical Encoding Rules (COER) are now available with the -soed compiler option and the oss.jar SOED runtime library.

New command-line option

The ASN.1/Java TOED compiler now supports the -limitMethodSize <number> compiler option, which enables you to split the generated methods that exceed the 64K size limit into smaller parts. The "number" parameter specifies the number of lines of generated source code.

New methods

New methods have been added to the com.oss.asn1.Coder TOED runtime class. The methods enable or disable the Coder options that affect the JSON encoding of SET or SEQUENCE components that are defined using the OPTIONAL or the DEFAULT keyword:

  • enableEncodingOfAbsentComponents()
  • disableEncodingOfAbsentComponents()

The following methods have been added to the com.oss.util.ASN1PrintWriter class:

  • enablePrintingOfImpliedValues()
  • disablePrintingOfImpliedValues()
New Samples

The standards/tap3_bin2xml sample has been created. The sample demonstrates conversion of binary BER-encoded TAP3 records into XML (XER) format.

Improvements

The TOED BER/DER/OER/PER/XER Encoding Rules now support automatic encoding and decoding of values contained in a BIT STRING or OCTET STRING that is encoded by different encoding rules.

The formatted string that is returned by the toString() method of AbstractData can now be customized. An extra overloaded version of this method has been added to the class. Also, the TOED runtime now includes the com.oss.util.ASN1PrintWriter utility class which improves compatibility with the SOED API.

The error messages issued for invalid encodings of an unconstrained length determinant have been changed. The decoder issues more comprehensive error descriptions.

The runtime classes now provide a better implementation of the hashCode() method.

The ASN.1/Java PER SOED coder has been changed to interpret the unspecified lower bound of the length determinant in accordance with the 2015 version of the X.691 document. The -compat oldPERSemiBoundedStrings flag can be used to restore the compatibility with the previous revisions of the X.691 standard.


What's New in ASN.1/Java 6.1

New Features

COER, DER, XER, and CXER Support in TOED
New methods

The SOED and TOED runtimes now define the name() method of the Enumerated class, which easily determines the symbolic name of the enumerator.

The useIndefiniteLengthEncoding() method has been added to the com.oss.asn1.Coder class of the TOED API for better compatibility with the SOED API.

An overloaded version of the enableContainedValueDecoding() method has been added to the com.oss.asn1.Coder class:

public void enableContainedValueDecoding(boolean preserveEncoding)

This method enables automatic decoding of contained values, carried within a BIT STRING or OCTET STRING with contents constraints. This feature is supported in the SOED runtime only.

Improvements

The TOED runtime has been enhanced to support OER as defined in "Rec. ITU-T X.696 | ISO/IEC 8825-7", rather than only the subset of ASN.1 types as defined in the "NTCIP 1102:2004 Octet Encoding Rules (OER) Base Protocol" document.

The ASN.1/Java compiler has been changed to generate the type-safe getXXX() method for each alternative of the CHOICE type.

The ASN.1 compiler now informs the user about warnings and errors that were suppressed because relaxed mode is enabled by default.

The compiler now accepts comments within compiler command files. The "--" characters specify the beginning of a comment and can be placed anywhere on the line. The comment continues until either a subsequent "--" is reached or the line ends.

When the same coder object is used to decode from a byte buffer and then from a stream, the second attempt no longer results in a ClassCastException being thrown in the BER TOED coder.

Previously, some invalid encodings could cause the BER TOED decoder to throw an OutOfMemoryError. Since applications typically do not intercept Java errors, this caused the application to crash. Now the decoder will throw a DecodeFailedException with the OUT_MEMORY status code instead.

The BER and DER TOED decoders will now correctly process open types that are nested in constructed types as child components and have unknown extension values of child components of SEQUENCE, SET, or CHOICE types.

An anomaly in the SOED and TOED runtimes that caused performance degradation when a value of the UTF8String type was decoded has been fixed.

The recent Corrigendum (Rec. ITU X.691 Cor 4 | ISO/IEC 8825-2 Cor 4.) to the X.691 standard fixed a defect in Clause 32.6.1. The definition o f the fractional-value field of a DURATION-INTERVAL-ENCODING type is changed from

INTEGER(1..999, ..., 1000..MAX)

to

 INTEGER(0..999, ..., 1000..MAX)

The ASN.1/Java PER encoders/decoders will now behave according to the new definition.


What's New in ASN.1/Java 6.0

New Features

New runtime library

A new runtime library, the OSS ASN.1/Java Time-Optimized Encoder/Decoder (TOED), has been implemented.

TOED is optimized for faster encoding and decoding. The new ASN.1/Java TOED runtime, osstoed.jar, uses encoders/decoders generated by the compiler, dramatically speeding up the encoding/decoding process compared to the interpretive ASN.1/Java runtime, oss.jar, which is now referred to as the ASN.1/Java Space-Optimized Encoder/Decoder (SOED).

BER, basic PER (aligned and unaligned), and OER encoding rules are supported. Support for DER, CER and XER is coming soon. Limited constraint checking is available, only to the extent that is required by the corresponding encoding rules (PER, OER).

For more information of the differences between the ASN.1/Java SOED and TOED runtime packages, see the SOED versus TOED section.

OER Support

Support for the Octet Encoding Rules (OER), as specified by the NTCIP 1102:2004 Octet Encoding Rules (OER) Base Protocol document, has been implemented in the ASN.1/Java compiler, the TOED runtime library and ASN.1 Studio. OER messages can generally be encoded/decoded significantly faster compared to BER and PER messages, while being only slightly less compact than PER messages. Support for OER in ASN.1/Java SOED and ASN.1/Java LED will be provided in the next release.

New compiler options

New compiler options, -soed and -toed, have been added. These options instruct the compiler to generate either Java classes that are optimized for a smaller code size (to be used with oss.jar at run time), or Java classes that are optimized for speed (to be used with osstoed.jar at run time). The -soed option is selected by default when neither -soed nor -toed are specified. The -soed and -toed options are mutually exclusive; if specified simultaneously, the option specified last on the command line takes precedence.

New samples

The set of samples provided includes new samples illustrating the use of protocols based on the SAE J2735 Intelligent Transportation standard, as well as the RRC, S1AP, and X2AP LTE protocols based on 3GPP Release 10.


This documentation applies to the OSS® ASN.1 Tools for Java release 8.7 and later.

Copyright © 2024 OSS Nokalva, Inc. All rights reserved.
No part of this publication may be reproduced, stored in a retrieval system, or transmitted in any form or by any means electronic, mechanical, photocopying, recording or otherwise, without the prior permission of OSS Nokalva, Inc.
Every distributed copy of the OSS® ASN.1 Tools for Java is associated with a specific license and related unique license number. That license determines, among other things, what functions of the OSS ASN.1 Tools for Java are available to you.