Page 1 of 1

!!Help!! Can't access any class in smartcardio

Posted: Thu Nov 10, 2016 11:43 pm
by lefibr
!!Help!!

When I use javax.smartcardio, I can't access any classes in this package.Why? Is there anyone tell me what happened?
Gracias!

My code:

Code: Select all

// show the list of available terminals
        TerminalFactory factory = TerminalFactory.getDefault();
        List<CardTerminal> terminals = factory.terminals().list();
        System.out.println("Terminals: " + terminals);
        // get the first terminal
        CardTerminal terminal = terminals.get(0);
        // establish a connection with the card
        Card card = terminal.connect("T=0");
        System.out.println("card: " + card);
        CardChannel channel = card.getBasicChannel();
        ResponseAPDU r = channel.transmit(new CommandAPDU(c1));
        System.out.println("response: " + toString(r.getBytes()));
        // disconnect
        card.disconnect(false);

Re: !!Help!! Can't access any class in smartcardio

Posted: Fri Nov 11, 2016 3:10 am
by Crawford
If you use eclipse, hover the mouse pointer over classes which has problems and then check the prompt.

Re: !!Help!! Can't access any class in smartcardio

Posted: Fri Nov 11, 2016 4:49 am
by lefibr
Here is the prompt:
Access restriction: The type 'TerminalFactory' is not API (restriction on required library 'C:\Program Files\Java\jre1.8.0_101\lib\rt.jar')


And I have resolved this problem just now.

Re: !!Help!! Can't access any class in smartcardio

Posted: Fri Nov 11, 2016 4:54 am
by lefibr
My Solution:
1 Package Explorer;
2 Right click the project -> Build Path -> Configure Build Path ...;
3 Dialog Properties for MyProject -> Java Build Path -> Tab "Libraries";
4 JRE System Library -> Access rules -> Edit;
5 Type Access Rules -> Add...;
6 Resolution: Accessible and Rule Pattern: javax/smartcardio/*;
7 OK -> OK -> OK;
8 I can access all Class in package javax.smartcardio!

Re: !!Help!! Can't access any class in smartcardio

Posted: Fri Nov 11, 2016 5:36 am
by Crawford
Thanks for your back to post the solution. This wiil be a reference for those who will experience the same problem with you.

Re: !!Help!! Can't access any class in smartcardio

Posted: Sun Sep 06, 2020 6:46 pm
by andromeda92
For me, the solution don't work all class method from smartcardio can't be resolved.
I use Eclipse 2020-06 64 bit last version windows 10

any idea ?
what is wrong ?

EDIT:
Resolved, it's not javax/smartcardio/*; but javax/smartcardio/**

Re: !!Help!! Can't access any class in smartcardio

Posted: Sun Sep 06, 2020 8:59 pm
by kuafu

Code: Select all

grant codeBase "jrt:/java.smartcardio" {
    permission javax.smartcardio.CardPermission "*", "*";
    permission java.lang.RuntimePermission "loadLibrary.j2pcsc";
    permission java.lang.RuntimePermission
                   "accessClassInPackage.sun.security.jca";
    permission java.lang.RuntimePermission
                   "accessClassInPackage.sun.security.util";
    permission java.util.PropertyPermission
                   "javax.smartcardio.TerminalFactory.DefaultType", "read";
    permission java.util.PropertyPermission "os.name", "read";
    permission java.util.PropertyPermission "os.arch", "read";
    permission java.util.PropertyPermission "sun.arch.data.model", "read";
    permission java.util.PropertyPermission
                   "sun.security.smartcardio.library", "read";
    permission java.util.PropertyPermission
                   "sun.security.smartcardio.t0GetResponse", "read";
    permission java.util.PropertyPermission
                   "sun.security.smartcardio.t1GetResponse", "read";
    permission java.util.PropertyPermission
                   "sun.security.smartcardio.t1StripLe", "read";
    // needed for looking up native PC/SC library
    permission java.io.FilePermission "<<ALL FILES>>","read";
    permission java.security.SecurityPermission "putProviderProperty.SunPCSC";
    permission java.security.SecurityPermission
                   "clearProviderProperties.SunPCSC";
    permission java.security.SecurityPermission
                   "removeProviderProperty.SunPCSC";
};
add policy to default.policy in {Your JDK path}\lib\security. MY JDK is JDK14.
JDK8 add policy to {java.home}\lib\security\java.policy (Windows)