Javacard可共享接口:lookupAID返回AID但getAppletShareableInterface返回null

问题描述 投票:2回答:1

编辑2:发现错误。我试图在构造函数中初始化Shareable对象。那时客户端的register方法尚未调用,因此JCRE没有其AID。虽然我的服务器的getShareableInterfaceObject(AID clientaid,byte参数)方法不要求客户端的AID为!= null,但JCRE可能会这样做,因为它为我的客户端调用此方法。我现在在处理我的第一个APDU时初始化我的Shareable对象,它现在可以工作了。

顺便说一下,非常感谢你帮助格式化我的帖子。绝对让它更容易阅读!


我是Java Card开发的新手,我不能让我的Shareable界面工作。

我有一个接口类声明我的客户端小程序想要使用的函数。我的服务器applet实现了这个类。我的客户端applet查找AID并尝试通过调用getAppletShareableInterface()获取接口。但这总是会让null回归。

我的服务器小程序的getShareableInterface()只包含return this;,所以我猜错在其他地方。但我不知道在哪里。

我正在使用JCWDE并逐步执行代码,我看到我的服务器applet调用了寄存器,因此客户端applet应该能够找到它。任何人都可以给我一些可能出错的指示吗?

编辑:

public interface IF extends Shareable {
    public void method();
}

public class Server extends Applet implements IF {
    public getShareableInterfaceObject {
        return this;
    }
}

public class Client extends Applet {

    private Client() {
        AID ServerAID = JCSystem.lookupAID(byteArrayAID, (short)0, (byte)byteArrayAID.length);
        interface = (IF)JCSystem.getAppletShareableInterfaceObject(ServerAID, (byte)0x00);
    }

    public void process(APDU apdu) {
        interface.method();
    }
}

lookupAID返回正确的AID,但getAppletShareableInterfaceObject返回null,就好像服务器applet不存在一样。

applet client javacard
1个回答
3
投票

发现了错误。我试图在构造函数中初始化Shareable对象。那时客户端的register方法尚未调用,因此JCRE没有其AID。虽然我的服务器的getShareableInterfaceObject(AID clientaid,byte参数)方法不要求客户端的AID为!= null,但JCRE可能会这样做,因为它为我的客户端调用此方法。我现在在处理我的第一个APDU时初始化我的Shareable对象,它现在可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.