es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Javacard: error en la inicialización de un arreglo estático en el paquete construido con ant-javacard.

Tengo el siguiente código de ejemplo para un paquete de biblioteca con un array estático:

package testapplets.library;
import javacard.security.RandomData;

public class SomeLibrary {
    public static final short TRUE = (short) 0x5AA5;
    public static final short FALSE = (short) 0xA55A;

    public static final byte[] test = { 'a', 'b', 'c' };

    public static short booleantest(boolean b) {
        return b ? TRUE : FALSE;
    }

    public static RandomData getRandom() {
        return RandomData.getInstance(RandomData.ALG_SECURE_RANDOM);
    }
}

y la siguiente tarea ANT para construir el paquete de la biblioteca:

<target name="libtest" depends="prepare">
    <javacard jckit="${converter.sdk}">
        <cap targetsdk="${target.sdk}" sources="src/library" package="testapplets.library" aid="11:22:33:44:55" export="lib" output="build/libtest.cap" version="1.0"></cap>
    </javacard>
</target>

pero estoy obteniendo el siguiente mensaje de error:

[convert] [ INFO: ] Converter [v3.1.0]
[convert] [ INFO: ]     Copyright (c) 1998, 2019, Oracle y/o sus afiliados. Todos los derechos reservados.
[convert]

[convert]

[convert] [ INFO: ] conversión completada con 1 error y 0 advertencias.
[convert] error: Inicialización de array estático en la clase testapplets/library/SomeLibrary en el paquete de la biblioteca no permitida.

¿Por qué el array estático en la biblioteca es problemático? Se compila correctamente si elimino el array estático.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    La inicialización de una matriz estática en un paquete de biblioteca presenta problemas porque la especificación de JavaCard no lo permite. La especificación de JavaCard requiere que todos los campos estáticos sean declarados como finales y deben ser inicializados en tiempo de ejecución. Por lo tanto, la inicialización de la matriz estática en la clase SomeLibrary no está permitida y causa un error de compilación al construir el paquete de biblioteca. El código se compilará correctamente si se elimina la matriz estática o se inicializa en tiempo de ejecución.

Comments are closed.