Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).

## [Unreleased]

### Changed
- Switched to `keyple-card-generic-java-lib` `4.0.0-SNAPSHOT`

### Fixed
- Fixed example URLs

## [2026-03-10]
### Upgraded
- Upgraded [Keyple Java BOM](https://github.com/eclipse-keyple/keyple-java-bom) to `2026.02.20`
Expand Down
3 changes: 2 additions & 1 deletion Example_Plugin_Android_OMAPI/app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,10 @@ dependencies {
"exclude" to listOf("org.simalliance.openmobileapi.jar"))))
// Begin Keyple configuration (generated by
// 'https://keyple.org/components/overview/configuration-wizard/')
implementation(platform("org.eclipse.keyple:keyple-java-bom:2026.02.20"))
implementation(platform("org.eclipse.keyple:keyple-java-bom:2026.03.16"))
implementation("org.eclipse.keypop:keypop-reader-java-api")
implementation("org.eclipse.keypop:keypop-calypso-card-java-api")
implementation("org.eclipse.keypop:keypop-genericcard-jvm-api")
implementation("org.eclipse.keyple:keyple-common-java-api")
implementation("org.eclipse.keyple:keyple-util-java-lib")
implementation("org.eclipse.keyple:keyple-service-java-lib")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,9 @@ class CoreExamplesActivity : AbstractExampleActivity() {

/** Create a card selection extension using the generic card extension. */
val cardSelectionExtension =
GenericExtensionService.getInstance().createGenericCardSelectionExtension()
GenericExtensionService.getInstance()
.getGenericCardApiFactory()
.createGenericCardSelectionExtension()
cardSelectionManager.prepareSelection(cardSelector, cardSelectionExtension)

/** Release the channel after the selection is done */
Expand Down
3 changes: 2 additions & 1 deletion Example_Plugin_PCSC/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ plugins {
dependencies {
// Begin Keyple configuration (generated by
// 'https://keyple.org/components/overview/configuration-wizard/')
implementation(platform("org.eclipse.keyple:keyple-java-bom:2026.02.20"))
implementation(platform("org.eclipse.keyple:keyple-java-bom:2026.03.16"))
implementation("org.eclipse.keypop:keypop-reader-java-api")
implementation("org.eclipse.keypop:keypop-genericcard-jvm-api")
implementation("org.eclipse.keyple:keyple-common-java-api")
implementation("org.eclipse.keyple:keyple-util-java-lib")
implementation("org.eclipse.keyple:keyple-service-java-lib")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,8 @@ public static void main(String[] args) {

// Prepare the selection by adding the created generic selection to the card selection scenario.
cardSelectionManager.prepareSelection(
cardSelector, cardExtension.createGenericCardSelectionExtension());
cardSelector,
cardExtension.getGenericCardApiFactory().createGenericCardSelectionExtension());

// Actual card communication: run the selection scenario.
CardSelectionResult selectionResult = cardSelectionManager.processCardSelectionScenario(reader);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,7 +116,8 @@ public static void main(String[] args) throws InterruptedException {

// Prepare the selection by adding the created generic selection to the card selection scenario.
cardSelectionManager.prepareSelection(
cardSelector, cardExtension.createGenericCardSelectionExtension());
cardSelector,
cardExtension.getGenericCardApiFactory().createGenericCardSelectionExtension());

// Schedule the selection scenario, always notify card presence.
cardSelectionManager.scheduleCardSelectionScenario(
Expand Down
14 changes: 7 additions & 7 deletions Example_Service/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,51 +6,51 @@ select card and how to observe plugins and readers.
Each example can be run independently.

* Use Case Generic 1 – Basic
selection: [UseCase1_BasicSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/core/service/example/UseCase1_BasicSelection)
selection: [UseCase1_BasicSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/example/core/service/UseCase1_BasicSelection)
* Demonstrates the most basic selection mode where no conditions are required to select a card.
* Implementations:
* For PC/SC plugin: [`Main_BasicSelection_Pcsc.java`]
* For Stub plugin: [`Main_BasicSelection_Stub.java`]

* Use Case Generic 2 – Protocol based
selection: [UseCase2_ProtocolBasedSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/core/service/example/UseCase2_ProtocolBasedSelection)
selection: [UseCase2_ProtocolBasedSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/example/core/service/UseCase2_ProtocolBasedSelection)
* Demonstrates the selection mode where the card's protocol is used as a differentiator.
* Implementations:
* For PC/SC plugin: [`Main_ProtocolBasedSelection_Pcsc.java`]
* For Stub plugin: [`Main_ProtocolBasedSelection_Stub.java`]

* Use Case Generic 3 – Aid based
selection: [UseCase3_AidBasedSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/core/service/example/UseCase3_AidBasedSelection)
selection: [UseCase3_AidBasedSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/example/core/service/UseCase3_AidBasedSelection)
* Demonstrates the selection mode where the card is selected by its DF Name with an appropriate AID.
* Implementations:
* For PC/SC plugin: [`Main_AidBasedSelection_Pcsc.java`]
* For Stub plugin: [`Main_AidBasedSelection_Stub.java`]

* Use Case Generic 4 – Aid based
selection: [UseCase4_ScheduledSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/core/service/example/UseCase4_ScheduledSelection)
selection: [UseCase4_ScheduledSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/example/core/service/UseCase4_ScheduledSelection)
* Demonstrates the selection is processed as soon as the card is detected by an observable reader.
* Implementations:
* For PC/SC plugin: [`Main_ScheduledSelection_Pcsc.java`]
* For Stub plugin: [`Main_ScheduledSelection_Stub.java`]

* Use Case Generic 5 – Sequential multiple
selection: [UseCase5_SequentialMultiSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/core/service/example/UseCase5_SequentialMultiSelection)
selection: [UseCase5_SequentialMultiSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/example/core/service/UseCase5_SequentialMultiSelection)
* Demonstrates multiple selections performed successively on the same card with the navigation options (FIRST/NEXT)
defined by the ISO standard.
* Implementations:
* For PC/SC plugin: [`Main_SequentialMultiSelection_Pcsc.java`]
* For Stub plugin: [`Main_SequentialMultiSelection_Stub.java`]

* Use Case Generic 6 – Grouped multiple
selection: [UseCase6_GroupedMultiSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/core/service/example/UseCase6_GroupedMultiSelection)
selection: [UseCase6_GroupedMultiSelection](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/example/core/service/UseCase6_GroupedMultiSelection)
* Demonstrates multiple selections made at once on the same card with the navigation options (FIRST/NEXT) defined by
the ISO standard and returned as a single selection result.
* Implementations:
* For PC/SC plugin: [`Main_GroupedMultiSelection_Pcsc.java`]
* For Stub plugin: [`Main_GroupedMultiSelection_Stub.java`]

* Use Case Generic 7 – Plugin and reader
observation: [UseCase7_PluginAndReaderObservation](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/core/service/example/UseCase7_PluginAndReaderObservation)
observation: [UseCase7_PluginAndReaderObservation](https://github.com/eclipse-keyple/keyple-java-example/tree/main/Example_Service/src/main/java/org/eclipse/keyple/example/core/service/UseCase7_PluginAndReaderObservation)
* Demonstrates the observation of a plugin to monitor the connection/disconnection of readers and of the readers to
monitor the insertion/removal of cards.
* Implementations:
Expand Down
3 changes: 2 additions & 1 deletion Example_Service/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ plugins {
dependencies {
// Begin Keyple configuration (generated by
// 'https://keyple.org/components/overview/configuration-wizard/')
implementation(platform("org.eclipse.keyple:keyple-java-bom:2026.02.20"))
implementation(platform("org.eclipse.keyple:keyple-java-bom:2026.03.16"))
implementation("org.eclipse.keypop:keypop-reader-java-api")
implementation("org.eclipse.keypop:keypop-genericcard-jvm-api")
implementation("org.eclipse.keyple:keyple-common-java-api")
implementation("org.eclipse.keyple:keyple-util-java-lib")
implementation("org.eclipse.keyple:keyple-service-java-lib")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
package org.eclipse.keyple.example.core.service.UseCase1_BasicSelection;

import java.util.List;
import org.eclipse.keyple.card.generic.GenericCardSelectionExtension;
import org.eclipse.keyple.card.generic.GenericExtensionService;
import org.eclipse.keyple.core.service.Plugin;
import org.eclipse.keyple.core.service.SmartCardService;
Expand All @@ -22,6 +21,7 @@
import org.eclipse.keyple.plugin.pcsc.PcscCardCommunicationProtocol;
import org.eclipse.keyple.plugin.pcsc.PcscPluginFactoryBuilder;
import org.eclipse.keyple.plugin.pcsc.PcscReader;
import org.eclipse.keypop.genericcard.GenericCardSelectionExtension;
import org.eclipse.keypop.reader.CardReader;
import org.eclipse.keypop.reader.ChannelControl;
import org.eclipse.keypop.reader.ConfigurableCardReader;
Expand Down Expand Up @@ -92,6 +92,7 @@ public static void main(String[] args) {

List<String> apduResponses =
GenericExtensionService.getInstance()
.getGenericCardApiFactory()
.createCardTransaction(cardReader, smartCard)
.prepareApdu(cplcApdu)
.processCommands(ChannelControl.CLOSE_AFTER)
Expand Down Expand Up @@ -192,7 +193,9 @@ private static SmartCard selectCard(CardReader reader) {
CardSelectionManager cardSelectionManager = readerApiFactory.createCardSelectionManager();
IsoCardSelector cardSelector = readerApiFactory.createIsoCardSelector();
GenericCardSelectionExtension genericCardSelectionExtension =
GenericExtensionService.getInstance().createGenericCardSelectionExtension();
GenericExtensionService.getInstance()
.getGenericCardApiFactory()
.createGenericCardSelectionExtension();
cardSelectionManager.prepareSelection(cardSelector, genericCardSelectionExtension);

CardSelectionResult selectionResult = cardSelectionManager.processCardSelectionScenario(reader);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@
************************************************************************************** */
package org.eclipse.keyple.example.core.service.UseCase2_ProtocolBasedSelection;

import org.eclipse.keyple.card.generic.GenericCardSelectionExtension;
import org.eclipse.keyple.card.generic.GenericExtensionService;
import org.eclipse.keyple.core.service.*;
import org.eclipse.keyple.plugin.pcsc.PcscCardCommunicationProtocol;
import org.eclipse.keyple.plugin.pcsc.PcscPluginFactoryBuilder;
import org.eclipse.keyple.plugin.pcsc.PcscReader;
import org.eclipse.keypop.genericcard.GenericCardSelectionExtension;
import org.eclipse.keypop.reader.CardReader;
import org.eclipse.keypop.reader.ConfigurableCardReader;
import org.eclipse.keypop.reader.ReaderApiFactory;
Expand Down Expand Up @@ -178,7 +178,9 @@ private static SmartCard selectCard(CardReader reader) {
CardSelector<BasicCardSelector> cardSelector =
readerApiFactory.createBasicCardSelector().filterByCardProtocol(MIFARE_ULTRALIGHT_PROTOCOL);
GenericCardSelectionExtension genericCardSelectionExtension =
GenericExtensionService.getInstance().createGenericCardSelectionExtension();
GenericExtensionService.getInstance()
.getGenericCardApiFactory()
.createGenericCardSelectionExtension();
cardSelectionManager.prepareSelection(cardSelector, genericCardSelectionExtension);

CardSelectionResult selectionResult = cardSelectionManager.processCardSelectionScenario(reader);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,10 @@ public static void main(String[] args) {

// Prepare the selection by adding the created generic selection to the card selection scenario.
cardSelectionManager.prepareSelection(
cardSelector, GenericExtensionService.getInstance().createGenericCardSelectionExtension());
cardSelector,
GenericExtensionService.getInstance()
.getGenericCardApiFactory()
.createGenericCardSelectionExtension());

// Actual card communication: run the selection scenario.
CardSelectionResult selectionResult =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,10 @@ public static void main(String[] args) throws InterruptedException {

// Prepare the selection by adding the created generic selection to the card selection scenario.
cardSelectionManager.prepareSelection(
cardSelector, GenericExtensionService.getInstance().createGenericCardSelectionExtension());
cardSelector,
GenericExtensionService.getInstance()
.getGenericCardApiFactory()
.createGenericCardSelectionExtension());

// Schedule the selection scenario.
cardSelectionManager.scheduleCardSelectionScenario(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,14 +12,14 @@
************************************************************************************** */
package org.eclipse.keyple.example.core.service.UseCase5_SequentialMultiSelection;

import org.eclipse.keyple.card.generic.GenericCardSelectionExtension;
import org.eclipse.keyple.card.generic.GenericExtensionService;
import org.eclipse.keyple.core.service.*;
import org.eclipse.keyple.core.util.HexUtil;
import org.eclipse.keyple.example.core.service.common.ConfigurationUtil;
import org.eclipse.keyple.plugin.pcsc.PcscCardCommunicationProtocol;
import org.eclipse.keyple.plugin.pcsc.PcscPluginFactoryBuilder;
import org.eclipse.keyple.plugin.pcsc.PcscReader;
import org.eclipse.keypop.genericcard.GenericCardSelectionExtension;
import org.eclipse.keypop.reader.CardReader;
import org.eclipse.keypop.reader.ConfigurableCardReader;
import org.eclipse.keypop.reader.ReaderApiFactory;
Expand Down Expand Up @@ -110,7 +110,9 @@ public static void main(String[] args) {
.setFileOccurrence(CommonIsoCardSelector.FileOccurrence.FIRST);

GenericCardSelectionExtension genericCardSelectionExtension =
GenericExtensionService.getInstance().createGenericCardSelectionExtension();
GenericExtensionService.getInstance()
.getGenericCardApiFactory()
.createGenericCardSelectionExtension();

// Prepare the selection by adding the created generic selection to the card selection scenario.
cardSelectionManager.prepareSelection(cardSelector, genericCardSelectionExtension);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@
package org.eclipse.keyple.example.core.service.UseCase6_GroupedMultiSelection;

import java.util.Map;
import org.eclipse.keyple.card.generic.GenericCardSelectionExtension;
import org.eclipse.keyple.card.generic.GenericExtensionService;
import org.eclipse.keyple.core.service.*;
import org.eclipse.keyple.core.util.HexUtil;
import org.eclipse.keyple.example.core.service.common.ConfigurationUtil;
import org.eclipse.keyple.plugin.pcsc.PcscCardCommunicationProtocol;
import org.eclipse.keyple.plugin.pcsc.PcscPluginFactoryBuilder;
import org.eclipse.keyple.plugin.pcsc.PcscReader;
import org.eclipse.keypop.genericcard.GenericCardSelectionExtension;
import org.eclipse.keypop.reader.CardReader;
import org.eclipse.keypop.reader.ConfigurableCardReader;
import org.eclipse.keypop.reader.ReaderApiFactory;
Expand Down Expand Up @@ -102,7 +102,9 @@ public static void main(String[] args) {
CardSelectionManager cardSelectionManager = readerApiFactory.createCardSelectionManager();

GenericCardSelectionExtension genericCardSelectionExtension =
GenericExtensionService.getInstance().createGenericCardSelectionExtension();
GenericExtensionService.getInstance()
.getGenericCardApiFactory()
.createGenericCardSelectionExtension();

// AID based selection: get the first application occurrence matching the AID, keep the
// physical channel open
Expand Down
3 changes: 2 additions & 1 deletion Example_Service_Resource/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,9 @@ plugins {
dependencies {
// Begin Keyple configuration (generated by
// 'https://keyple.org/components/overview/configuration-wizard/')
implementation(platform("org.eclipse.keyple:keyple-java-bom:2026.02.20"))
implementation(platform("org.eclipse.keyple:keyple-java-bom:2026.03.16"))
implementation("org.eclipse.keypop:keypop-reader-java-api")
implementation("org.eclipse.keypop:keypop-genericcard-jvm-api")
implementation("org.eclipse.keyple:keyple-common-java-api")
implementation("org.eclipse.keyple:keyple-util-java-lib")
implementation("org.eclipse.keyple:keyple-service-java-lib")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
************************************************************************************** */
package org.eclipse.keyple.example.core.service.resource.UseCase1_CardResourceService;

import org.eclipse.keyple.card.generic.GenericCardSelectionExtension;
import org.eclipse.keyple.card.generic.GenericExtensionService;
import org.eclipse.keyple.core.service.*;
import org.eclipse.keyple.core.service.resource.*;
Expand All @@ -24,6 +23,7 @@
import org.eclipse.keyple.plugin.stub.StubPluginFactoryBuilder;
import org.eclipse.keyple.plugin.stub.StubReader;
import org.eclipse.keyple.plugin.stub.StubSmartCard;
import org.eclipse.keypop.genericcard.GenericCardSelectionExtension;
import org.eclipse.keypop.reader.CardReader;
import org.eclipse.keypop.reader.ConfigurableCardReader;
import org.eclipse.keypop.reader.ReaderApiFactory;
Expand Down Expand Up @@ -94,7 +94,9 @@ public static void main(String[] args) throws InterruptedException {
readerApiFactory.createIsoCardSelector().filterByPowerOnData(ATR_REGEX_A);

GenericCardSelectionExtension genericCardSelectionExtension =
GenericExtensionService.getInstance().createGenericCardSelectionExtension();
GenericExtensionService.getInstance()
.getGenericCardApiFactory()
.createGenericCardSelectionExtension();

CardResourceProfileExtension cardResourceExtensionA =
GenericExtensionService.getInstance()
Expand Down
Loading