モジュール java.smartcardio
パッケージ javax.smartcardio

クラスCardChannel

java.lang.Object
javax.smartcardio.CardChannel

public abstract class CardChannel
extends Object
スマート・カードへの論理チャネル接続です。 スマート・カードとのAPDUの交換に使用します。 CardChannelオブジェクトは、Card.getBasicChannel()またはCard.openLogicalChannel()メソッドを呼び出すことで取得できます。
導入されたバージョン:
1.6
関連項目:
Card, CommandAPDU, ResponseAPDU
  • コンストラクタのサマリー

    コンストラクタ 
    修飾子 コンストラクタ 説明
    protected CardChannel()
    新しいCardChannelオブジェクトを構築します。
  • メソッドのサマリー

    修飾子と型 メソッド 説明
    abstract void close()
    このCardChannelをクローズします。
    abstract Card getCard()
    このチャネルが関連付けられているカードを返します。
    abstract int getChannelNumber()
    このCardChannelのチャネル番号を返します。
    abstract int transmit​(ByteBuffer command, ByteBuffer response)
    コマンドByteBufferに格納されたコマンドAPDUを送信し、応答ByteBufferにレスポンスAPDUを受信します。
    abstract ResponseAPDU transmit​(CommandAPDU command)
    指定されたコマンドAPDUをスマート・カードに送信し、レスポンスAPDUを返します。

    クラス java.lang.Objectで宣言されたメソッド

    cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait
  • コンストラクタの詳細

    • CardChannel

      protected CardChannel()
      新しいCardChannelオブジェクトを構築します。

      このコンストラクタはサブクラスのみから呼び出されます。 アプリケーションでは、Card.getBasicChannel()およびCard.openLogicalChannel()メソッドを呼び出してCardChannelオブジェクトを取得する必要があります。

  • メソッドの詳細

    • getCard

      public abstract Card getCard()
      このチャネルが関連付けられているカードを返します。
      戻り値:
      このチャネルが関連付けられているカード
    • getChannelNumber

      public abstract int getChannelNumber()
      このCardChannelのチャネル番号を返します。 チャネル番号0は、基本論理チャネルを示します。
      戻り値:
      このCardChannelのチャネル番号
      例外:
      IllegalStateException - このチャネルがクローズしている場合、または対応するカードが切断されている場合。
    • transmit

      public abstract ResponseAPDU transmit​(CommandAPDU command) throws CardException
      指定されたコマンドAPDUをスマート・カードに送信し、レスポンスAPDUを返します。

      コマンドAPDUのCLAバイトは、このCardChannelのチャネル番号と一致するよう自動的に調整されます。

      このメソッドは、MANAGE CHANNEL APDUの送信には使用できません。 論理チャネルは、Card.openLogicalChannel()およびCardChannel.close()メソッドを使用して管理する必要があります。

      実装では、送信プロトコルのアーティファクトが透過的に処理されます。 たとえば、T=0プロトコルを使用すると、ISO/IEC 7816-4に記載されているように、次のような処理が行われます。

      • レスポンスAPDUにSW1 61がある場合、実装では、LeフィールドとしてSW2を使用するGET RESPONSEコマンドが発行される必要があります。 この処理は、SW1 61が受信されるかぎり繰り返されます。 これらの交換の応答本体は、最終的な応答本体を作成するために連結されます。

      • レスポンスAPDUが6C XXの場合、実装では、LeフィールドとしてXXを使用するコマンドが再発行される必要があります。

      このメソッドによって返されるResponseAPDUは、この処理が実行されたあとの結果です。

      パラメータ:
      command - コマンドAPDU
      戻り値:
      カードから受信したレスポンスAPDU
      例外:
      IllegalStateException - このチャネルがクローズしている場合、または対応するカードが切断されている場合。
      IllegalArgumentException - APDUがMANAGE CHANNELコマンドをエンコードする場合
      NullPointerException - コマンドがnullの場合
      CardException - カード操作が失敗した場合
    • transmit

      public abstract int transmit​(ByteBuffer command, ByteBuffer response) throws CardException
      コマンドByteBufferに格納されたコマンドAPDUを送信し、応答ByteBufferにレスポンスAPDUを受信します。

      コマンド・バッファにはcommand.position()から始まる有効なコマンドAPDUが含まれている必要があり、APDUの長さはcommand.remaining()バイトである必要があります。 復帰時には、コマンド・バッファの位置はその制限と等しくなります。制限は変更されません。 出力バッファは、レスポンスAPDUバイトを受信します。 その位置は受信したバイト数だけ増加します。これは、このメソッドの戻り値でもあります。

      コマンドAPDUのCLAバイトは、このCardChannelのチャネル番号と一致するよう自動的に調整されます。

      このメソッドは、MANAGE CHANNEL APDUの送信には使用できません。 論理チャネルは、Card.openLogicalChannel()およびCardChannel.close()メソッドを使用して管理する必要があります。

      SW1値61または6Cを持つレスポンスAPDUの処理については、transmit()を参照してください。

      パラメータ:
      command - コマンドAPDUを含むバッファ
      response - カードからレスポンスAPDUを受信するバッファ
      戻り値:
      受信したレスポンスAPDUの長さ
      例外:
      IllegalStateException - このチャネルがクローズしている場合、または対応するカードが切断されている場合。
      NullPointerException - コマンドまたは応答がnullの場合
      ReadOnlyBufferException - 応答バッファが読取り専用の場合
      IllegalArgumentException - コマンドと応答が同じオブジェクトの場合、responseにレスポンスAPDUを受信するための十分な容量がない可能性がある場合、またはAPDUがMANAGE CHANNELコマンドをエンコードする場合
      CardException - カード操作が失敗した場合
    • close

      public abstract void close() throws CardException
      このCardChannelをクローズします。 論理チャネルは、[xx 70 80 0n]という形式を使用するMANAGE CHANNELコマンドを発行することによってクローズされます。ここで、nはこのチャネルのチャネル番号であり、xxは、この論理チャネルをエンコードし、他のすべてのビットが0に設定されているCLAバイトです。 このメソッドが復帰した後、このクラス内のその他のメソッドを呼び出すと、IllegalStateExceptionが発生します。

      このメソッドを使用して基本論理チャネルをクローズすることはできません。 これは、Card.disconnect(boolean)を呼び出すことでクローズできます。

      例外:
      CardException - カード操作が失敗した場合
      IllegalStateException - このCardChannelが基本論理チャネルの接続を表す場合