ASN.1 Tools for Java — Enhancements History
ASN.1 Tools for Java - version 8.1.0 (latest version)
- Partial decoding for BER and DER:
The partial decoding feature is now available with BER, DER, PER, UPER, OER, and
Note that BER/DER support requires osstoed.jar version 8.1+.
- New samples have been created for
ASN.1 Tools for Java - version 8.0.0
- The ASN.1/Java Tools now includes ASN.1 Studio v9.0.0.
- 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
- 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 ASN.1 compiler now supports the new
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
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
compiler directive and optionally passes the decoded field value to it. The
partial decode feature
enables the user to
The feature is available for the PER, UPER, CPER, CUPER, OER, and COER encoding rules.
- 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
- The ASN.1 compiler and TOED runtime have been enhanced to support the
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.
- 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
- 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 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
protocols for 3GPP Release 15 have been created. The samples for the LTE S1AP,
protocols have been updated to 3GPP Release 15.
- New samples in the advanced category have been created to explain the use of the partial
s1ap_pd (uses 3GPP S1AP
ASN.1 Tools for Java - version 7.2.0
- The ASN.1/Java Tools now includes ASN.1 Studio v8.3.0.
- 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 a 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 has been
implemented: now non-critical deviations from the expected syntax are ignored.
- 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
- 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)
ASN.1 Tools for Java - version 7.1.0
- The ASN.1/Java Tools now includes ASN.1 Studio v8.2.0.
- Conformance to Draft ITU-T Recommendation X.jsoner:
- The ASN.1/Java compiler and the SOED, TOED, and LED runtime libraries support the
JSON Encoding Rules. The existing
command-line option instructs the compiler to enable support for X.jsoner at runtime.
- The JSON codec supports the following encoding instructions:
- The following new samples for LTE protocols have been added:
ASN.1 Tools for Java - version 7.0.0
- The ASN.1/Java Tools now includes ASN.1 Studio v8.1.0.
- 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.
- 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(s)
specify the type(s) 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/-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.
- The -sampleCode command line option can be specified with both the default -soed and the
-toed options. Before the change the -sampleCode option was ignored when specified along with the
- Validation of the following constraints has been implemented in TOED:
- Element set specification (x.680 clause 50) - EXCEPT and ALL EXCEPT
- Subtype elements (x.680 clause 51)
- Permitted alphabet
- Type constraint
- Pattern constraint
- Property settings
- Duration range
- Time point range
- Recurrence range
- Other constraints
- Table constraint
- Component relation constraint
- Contents constraint
- The ASN.1/Java SOED/TOED PER encoder-decoder implementation now conforms to the recent X.691 corrigendum (2015): an encoding contained in a BIT STRING should be at least one octet for PER ALIGNED and 1 bit for PER UNALIGNED.
- New samples:
- A sample for the 2016-03 version of the J2735 protocol has been created. The sample does not include the J2735:2016 ASN.1 specification due to licensing reasons. Users should obtain it directly from the ITS SAE site.
- A sample for the 3GPP XwAP (TS 36.463) protocol has been created.
ASN.1 Tools for Java - version 6.3.1
ASN.1 Tools for Java - version 6.3.0
- The ASN.1/Java Tools now includes ASN.1 Studio v7.5.1. (Windows Only)
- The ASN.1/Java Time Optimize Encoder/Decoder (TOED) now supports checking the following constraints:
When the -constraint option is specified and PDUs are present, the compiler generates the validate() method, which enables runtime constraint checking for PDUs.
- Element set specification (x.680 clause 50): UNION and INTERSECTION.
- Subtype elements (x.680 clause 51):
- InnerTypeConstraints (WITH COMPONENTS).
- The Java classes for INTEGER types with named numbers now include constants for each of the named numbers. This feature allows the named numbers to be used in Java switch statements.
- The coder class provides the methods enableCompact() and disableCompact() to enable and disable the generation of whitespace by the XER, E-XER and JSON encoders. The enableCompact() method disables whitespace generation and the encoding is written as a single line of text with no whitespace. The disableCompact() method adds newlines and indentation to improve readability.
- The Coder class provides methods (available only for TOED) to set the indentation width in the encodings generated by the XER and JSON encoders.
ASN.1 Tools for Java - version 6.2.0
- The ASN.1/Java Tools now includes ASN.1 Studio v7.4.
- The ASN.1/Java compiler and the osstoed.jar TOED runtime library now support the JSON Encoding Rules.
- The formatted string that is returned by the toString() method of the AbstractData can now be customized.
- 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.
- The ASN.1/Java TOED compiler now supports the -limitMethodSize <number> compiler option that 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.
- 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.
- New methods have been added to the com.oss.asn1.Coder TOED runtime class to enable or disable the Coder options that affect the JSON/ER encoding of SET or SEQUENCE components that are defined using the OPTIONAL or the DEFAULT keyword. By default, optional components that are not present in a SET or a SEQUENCE value are not encoded by the JSON Coder. Alternatively, JSON/ER allows the encoder to identify omitted optional components by using the "null" token, unless the type of the component is NULL or is an open type.
ASN.1 Tools for Java - version 6.1.0
- The ASN.1/Java Tools now includes ASN.1 Studio v7.1
- The ASN.1/Java compiler and the ASN.1/Java TOED runtime library now support Octet Encoding Rules (OER) and Canonical Octet Encoding Rules (COER) 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 Octet Encoding Rules (OER), like the Packed Encoding Rules (PER), produce compact encodings by taking advantage of information present in the ASN.1 schema to limit the amount of information included in each encoded message. However, in contrast to PER, OER favors encoding/decoding speed over compactness of the encodings.
- Distinguished Encoding Rules (DER), XML Encoding Rules (XER) and Canonical XML Encoding Rules (CXER) are now supported in Java TOED.
- 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/Java SOED and TOED runtimes now define the name() method of the Enumerated class to easily easily determine the symbolic name of the enumerator.
- Samples have been added that illustrate use of the SBc-AP, M2AP, and M3AP LTE protocols based on 3GPP Release 11.
- A sample has been added that illustrates use of the DSRC Message Set Standard, SAE J2735_200911.
Note: OSS ASN.1 Tools for Java version 6.0.0 implement an older verison of OER, specified by NTCIP 1102:2004. If you are using OER we strongly recommend that you upgrade to 6.1.0 or later.
ASN.1 Tools for Java - version 6.0.0
- The ASN.1/Java Tools now includes ASN.1 Studio v7.0
- A new runtime library, the OSS ASN.1/Java Time-Optimized Encoder/Decoder (TOED), was implemented. As the name suggests, 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) - from now on referred to as the ASN.1/Java Space-Optimized Encoder/Decoder (SOED).
- See the Reference Manual for a complete list of differences between the ASN.1/Java SOED and TOED runtime packages
- With the exceptions noted in the manual, ASN.1/Java SOED and TOED have the same API. In most cases you can change from using one to using the other with no impact on your application code.
- Support for the Octet Encoding Rules (OER), as specified by the NTCIP 1102:2004 Octet Encoding Rules (OER) Base Protocol document, was introduced in the ASN.1/Java compiler, the TOED runtime library and ASN.1 Studio. OER messages can generally be encoded/decoded significantly faster than 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.
- The set of samples provided now includes samples illustrating the use of protocols based on the SAE J2735 Intelligent Transportation standard, as well as the 3GPP Release 10 RRC, S1AP, and X2AP LTE protocols.
ASN.1 Tools for Java - version 5.1.0
- The ASN.1/Java Tools now includes ASN.1 Studio, a powerful new IDE packed with functionality that allows you to compile ASN.1 specs, display, create, modify or encode messages with just a few mouse clicks, and so much more!
- You can generate code demonstrating how to perform encoding/decoding operation for any type in your ASN.1 specification.
- Support for new built-in ASN.1 OID-IRI and RELATIVE-OID-IRI types from the ASN.1:2008 standards has been added.
- On Windows, the ASN.1/Java tools now install under the Program Files\OSS Nokalva\asn1pjav\ folder (whereas before the 5.0 release, they were installed under Program Files\OSS\asn1pjav\).
- Samples for the Windows platforms are now installed under the folder pointed to by the environment variable %ALLUSERSPROFILE%. By default, on Windows 7 and VISTA, the samples are installed under the C:\ProgramData\OSS Nokalva\asn1pjav\win32\<version-number>\samples folder, and on Windows XP, the samples are installed under the C:\Documents and Settings\All Users\Application Data\OSS Nokalva\asn1pjav\win32\<version-number>\samples folder.
ASN.1 Tools for Java - version 4.1.0
- The OSS ASN.1 Tools for Java now support the PATTERN constraint notation. This notation allows you to restrict a character string type to be of a preset sequence of acceptable character patterns. This constraint notation has the general format:
<TypeName> ::= <RestrictedCharType> (PATTERN <RegularExpression>)
NoZeros ::= NumericString (PATTERN noZero)
noZero UniversalString ::= "[^0]"
ASN.1 Tools for Java - version 4.0.0
- The OSS ASN.1 Tools for Java now support the full range of time types as specified in ISO 8601 (TIME, DATE, TIME-OF-DAY, DATE-TIME, DURATION). These representations of date and time were standardized to avoid misinterpretations when communicating across national boundaries.
- The ASN.1/Java compiler has been changed to automatically select the -ignoreIncompleteItems option if the -relaxedMode option is specified.
- The ASN.1/Java runtime introduces the new ossvalidator.jar class library to support runtime constraint checking for use with the J2ME CLDC 1.1 platform. The previous J2ME CLDC 1.1 compatible runtime library, ossmicro.jar, did not include support for runtime constraint checking. With the ossvalidator.jar library, you can now perform runtime constraint checking for ASN.1 JAVA applications developed for resource-constrained environments.
- The ASN.1/Java runtime provides a new method, decodeWithPositions(), that allows you to save the size/offset information of an encoded PDU component when decoding. The size/offset information is useful in determining the position of any field in the encoded data.
ASN.1 Tools for Java - version 3.1.0
- OSS ASN.1 Tools for Java version 3.1 supports the J2ME CLDC 1.1 platform. Specifically, a new command line option -microedition, and new runtime library ossmicro.jar, are available to generate Java classes which are compatible with J2ME CLDC 1.1. Now you can develop ASN.1 applications in Java for resource-constrained environments.
- A new compiler option, -ignoreIncompleteItems, instructs the compiler to ignore incomplete ASN.1 definitions that appear within ASN.1 modules and directly or indirectly reference undefined types or values. This allows you to successfully utilize specs that have unresolved references that don't affect your application.
- Two new performance tuning parameters are available for optimization of the PER decoder when decoding ASN.1 types OCTET STRING, BIT STRING and open type. These parameters, settable via the Java system properties, affect the internal buffering strategies used when decoding large byte arrays. Now you can control the size of the initial buffer for the decoder output, as well as the size of additional buffer allocations, when decoding fragmented byte array content.
- The new utility class com.oss.util.Benchmark has been introduced to simplify encoder/decoder performance timing. See the runtime API documentation for more information about the Benchmark class.
ASN.1 Tools for Java - version 3.0.0
- The OSS ASN.1 Tools for Java version 3.0 includes support for Extended XML Encoding Rules (E-XER), allowing you to enjoy the best of both ASN.1 and XML.
- A powerful new XER encoding feature allows the user application to generate customized XER encodings. User-defined XER encodings will be placed in the output stream instead of the standard encodings that would have been generated by default methods of the XER coder class.
- The ASN.1/Java Tools have been performance-optimized. The BER decoder's performance has been improved to now run up to 2.5 times or 150% faster.
ASN.1 Tools for Java - version 2.2.0
- The OSS ASN.1 Tools for Java version 2.2 includes support for special REAL values -0 and NOT-A-NUMBER, as well as changes to the ASN.1/Java compiler to XML value notation to allow plain textual identifiers for some values.
ASN.1 Tools for Java - version 2.1.0
- When a decoding fails in the midst of decoding a message, a partial value can now be caught and examined.
- Both the XER and CXER encoders were optimized to run up to 100% faster than in the previous version.
- An additional package in the runtime is now available. It is called com.oss.metadata and provides access to the tags, Java class names, ASN.1 names, flags (such as extensibility), and constraints.
ASN.1 Tools for Java - version 2.0.0
The OSS ASN.1 Tools for Java version 2.0 supports the XML additions to ASN.1 described in the ASN.1:2002 standards documents.
- The ASN.1 compiler supports the XML value notation that provides a means of representing ASN.1 values using eXtensible Markup Language (XML) with the ASN.1 type definition as the schema. The XML value notation may be present within the same input ASN.1 file as other ASN.1 components.
- The encoder/decoder has been enhanced to allow you to encode/decode any PDU in the input using the XML encoding rules (XER) or the Canonical XML encoding rules (CXER). You can now add visibility to your ASN.1-described messages via XML.
- New compiler command-line options are now available, -xer and -cxer. These options are similar to the -ber/-der/-per/uper options in that they allow the associated set of encoding rules (namely, the XML encoding rules (XER) and the canonical XML encoding rules (CXER)) to be available to the encoder/decoder during runtime.
- A new ASN.1 compiler command-line option called "-xsl" has been added to allow you to automatically generate multiple default stylesheets, one for each PDU. Stylesheets allow you to have greater control over the visual aesthetic quality of an XML encoding.
- A new compiler directive OSS.Stylesheet has been introduced to allow you greater control over the default stylesheets which are produced by the ASN.1 compiler. Using this directive, you can instruct the ASN.1 compiler to generate a separate stylesheet with your own desired filename for any particular PDU.
- The ASN.1 compiler can now automatically generate XML DTD's (Data Type Definitions). Your application via the runtime XERDocument class can produce XML output. That output can be viewed and edited by any XML tool.
ASN.1 Tools for Java - version 1.5
- XML support in the compiler
- JIA API included
- A GUI interface for the OSS ASN.1/Java compiler
- Contents Constraint support
- The Lean Encoder/Decoder runtime included
- New hashCode() method
ASN.1 Tools for Java - version 1.5
- New Feature: ValueInFile (for OSS C users this is NOCOPY or OBJHANDLE) provides support for processing values or components of values that are a huge size. In particular, the runtime no longer assumes that the value is stored in RAM but allows the value to reside in any external storage such as a disk file. The value can also be written to or read from a TCP/IP socket.
- This release uses JDK 1.2.2. We found that switching to this version improved performance. We encourage our customers to use JDK 1.2.2 or higher as well. If you use the ValueInFile feature, using JDK 1.2.2 or higher is a requirement.