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

クラスCardChannel


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

      • 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が基本論理チャネルの接続を表す場合