de padroes.Na linha 13 criamos uma lista terminals que armazena um ou mais terminais (leitor PC/SC) plugados no sistema, que e retornado pelo factory, caso nao exista nenhum leitor plugado factory retornara uma excecao.Na linha 15 criamos uma variavel terminal que instancia um objeto CardTerminal, esse objeto representa um terminal (leitor PC/SC).Na linha 17 criamos uma variavel card que instancia um objeto Card, esse objeto representa o cartao que se encontra inserido no Leitor representado por terminal.Na linha 19 criamos uma variavel cardATR que instancia um objeto ATR, esse objeto representa o ATR (Answer to Reset) retornado pelo cartao representado por card. Na linha 21 criamos uma variavel cardChannel que instancia um objeto CardChannel, esse objeto prove o canal de comunicacao que nossa aplicacao utilizara para trocar APDUs com o cartao, esse canal e retornado pelo cartao representado por card. Na linha 23 criamos uma variavel commandAPDU que instancia um objeto CommandAPDU, esse objeto representa um APDU de envio do host para o cartao atraves do canal de comunicacao representado por cardChannel.Na linha 25 criamos uma variavel responseAPDU que instancia um objeto ResponseAPDU, esse objeto representa um APDU de resposta do cartao para o host e e retornado atraves do canal de comunicacao representado por cardChannel.Na linha 31 iniciamos factory com uma "Fabrica de Terminais" padrao que no caso e o PC/SC.Na linha 34 preenchemos a lista terminals com terminais "fabricado" por factory, caso nao exista nenhum leitor PC/SC plugado no sistema ou ocorra um erro factory lancara uma excecao, do contrario a lista possuira ao menos um leitor.Na linha 38 iniciamos terminal instanciando o primeiro leitor contido na lista terminals.Na linha 43 estabelecemos conexao com o cartao presente na leitora atraves do comando terminal.connect("*") o parametro * informa para auto detectar o protocolo do cartao esse parametro tambem pode ser explicitamente informado como "T=0", "T=1" ou "T=CL", em caso de sucesso um objeto Card e retornado e card representara o cartao conectado na leitora, caso contrario terminal lancara uma excecao.Na linha 47 requisitamos o ATR (Answer To Reset) que se trata de um objeto ATR retornado pelo metodo getATR da instancia card.Na linha 53 abrimos um canal de comunicacao entre Host e Cartao, atraves da instancia cardChannel retornado pelo metodo getBasicChannel de card.Na linha 61 criamos um APDU a ser enviado para o cartao atraves do objeto CommandAPDU, esse APDU trata-se do comando de select padrao ISO7816 do nosso applet hello world instalado no cartao.Na linha 75 transmitimos o APDU para o cartao atraves do metodo transmit de cardChannel, esse metodo sempre retorna um objeto ResponseAPDU, que sempre possui a resposta (Status World) da operacao do comando enviado e ocasionalmente dados retornados pelo cartao, em caso de erros durante a transmissao o metodo lancara uma excecao.Na linha 94 transmitimos o APDU de teste para o Applet do cartao o qual responde uma copia exata do APDU de envio seguido do Status World 0x9000(OK).Bem como podem ver e extremamente simples acessar Smart Cards utilizando a tecnologia Java SE.Coloco a disposicao para download o projeto escrito no NetBeans, que pode ser tranquilamente compilado