I have the following java card applet, and in the same package I have another java class called Users. When I try to convert the applet into CAP file I got the error message Unsupported bytecode anewarray in clinit method
The applet is here
package classes;
import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISO7816;
import javacard.framework.ISOException;
import javacard.framework.JCSystem;
public class MainApplet extends Applet {
private static final byte MAIN_APPLET_CLA = (byte) 0xA0;
private static final byte MAIN_APPLET_INS_ADD = (byte) 0x10;
private static final byte MAIN_APPLET_INS_GET = (byte) 0x20;
private static final short MAX_SIZE = (short) 0xFF;
private static Users[] sysUsers = new Users[(short) 200];
private static final short CLA_ERROR = (short) 0x13;
private static final short INS_ERROR = (short) 0x14;
private static final short NO_DATA_FOUND = (short) 0x15;
private static final short NO_SUCH_INDEX = (short) 0x16;
private static short index = 00;
private MainApplet() {
}
public static void install(byte bArray[], short bOffset, byte bLength)
{
new MainApplet().register();
}
public void process(APDU apdu) {
// TODO Auto-generated method stub
if(selectingApplet())
return;
byte[] buffer = apdu.getBuffer();
if(buffer[ISO7816.OFFSET_CLA] != MAIN_APPLET_CLA )
ISOException.throwIt(CLA_ERROR);
switch(buffer[ISO7816.OFFSET_INS] & (byte) 0xFF)
{
case MAIN_APPLET_INS_ADD :
addUser(apdu);
break;
case MAIN_APPLET_INS_GET :
getUser(apdu);
break;
default : ISOException.throwIt(INS_ERROR);
}
}
public void addUser(APDU apdu)
{
byte[] buffer = apdu.getBuffer();
short p1 = (short) buffer[ISO7816.OFFSET_P1];
short p2 = (short) buffer[ISO7816.OFFSET_P2];
JCSystem.beginTransaction();
byte[] user = new byte[p1];
byte[] pass = new byte[p2];
for(short i = 0; i < p1; i++)
user[i] = buffer[(short) (5 + i)];
for(short j = 0; j < p2; j++)
pass[j] = buffer[(short)(5 + p1 + j)];
Users u1 = new Users(user , pass);
sysUsers[index] = u1;
index ++;
JCSystem.commitTransaction();
return;
}
public void getUser(APDU apdu)
{
byte[] buffer = apdu.getBuffer();
short p1 = (short)(buffer[ISO7816.OFFSET_P1]);
if(p1 >= index)
ISOException.throwIt(NO_SUCH_INDEX);
Users u = sysUsers[p1];
byte[] name = u.getNames();
byte[] pass = u.getPasss();
short id = u.getID();
for(short i = 0; i < (short) name.length; i++)
buffer[i] = name;
short counter = (short) name.length;
for(short j = 0; j < (short) pass.length; j++)
buffer[(short)(counter + j)] = pass[j];
short len = (short) (name.length + pass.length);
buffer[len] = (byte) id;
apdu.setOutgoingAndSend((short) 0,(short)(len +1 ));
}
}
and the USers class code is here
package classes;
public class Users {
private byte[] names;
private byte[] passs;
private short nIndex;
private short pIndex;
private short ID;
private static final short namesLength = (short) 0x09;
private static final short passLength = (short) 0x09;
private static short counter = 00;
private short namesIndex = 00;
private short passIndex = 00;
Users(byte[] n, byte[] p)
{
names = new byte[namesLength];
passs = new byte[passLength];
for(short i = 0; i < (short) names.length; i++)
{
names[i] = n[i];
namesIndex++;
}
nIndex = namesIndex;
for(short j = 0; j < (short) names.length; j++)
{
passs[j] = p[j];
passIndex++;
}
pIndex = passIndex;
ID = counter;
counter++;
}
public byte[] getNames() {
return names;
}
public void setNames(byte[] names) {
this.names = names;
}
public byte[] getPasss() {
return passs;
}
public void setPasss(byte[] passs) {
this.passs = passs;
}
public short getnIndex() {
return nIndex;
}
public void setnIndex(short nIndex) {
this.nIndex = nIndex;
}
public short getpIndex() {
return pIndex;
}
public void setpIndex(short pIndex) {
this.pIndex = pIndex;
}
public short getID() {
return ID;
}
public void setID(short iD) {
ID = iD;
}
}
I don't know how to solve this error !! Any help ??