Installation
Since Java 1.6 the JRE includes the package javax.smartcardio which was defined in the JSR 268. No need to compile additional source code.
For the example I used Eclipse Galileo and the Java 1.6 provided by Apple on a Mac OS X Snow Leopard (10.6.4).
Source code
import java.util.List; import javax.smartcardio.*; public class Blog { public static void main(String[] args) { try { // Display the list of terminals TerminalFactory factory = TerminalFactory.getDefault(); List<CardTerminal> terminals = factory.terminals().list(); System.out.println("Terminals: " + terminals); // Use the first terminal CardTerminal terminal = terminals.get(0); // Connect wit hthe card Card card = terminal.connect("*"); System.out.println("card: " + card); CardChannel channel = card.getBasicChannel(); // Send Select Applet command byte[] aid = {(byte)0xA0, 0x00, 0x00, 0x00, 0x62, 0x03, 0x01, 0x0C, 0x06, 0x01}; ResponseAPDU answer = channel.transmit(new CommandAPDU(0x00, 0xA4, 0x04, 0x00, aid)); System.out.println("answer: " + answer.toString()); // Send test command answer = channel.transmit(new CommandAPDU(0x00, 0x00, 0x00, 0x00)); System.out.println("answer: " + answer.toString()); byte r[] = answer.getData(); for (int i=0; i<r.length; i++) System.out.print((char)r[i]); System.out.println(); // Disconnect the card card.disconnect(false); } catch(Exception e) { System.out.println("Ouch: " + e.toString()); } } }
Output
Terminals: [PC/SC terminal Gemplus GemPC Twin 00 00]
card: PC/SC card in Gemplus GemPC Twin 00 00, protocol T=1, state OK
answer: ResponseAPDU: 2 bytes, SW=9000
answer: ResponseAPDU: 14 bytes, SW=9000
Hello world!
Conclusion
Nothing special to add. The major advantage here is that the wrapper is included in the runtime. So you do not have to install much on a system before you can use your program, just the JRE :-)