Skip to content

Commit 0525872

Browse files
refactor: normalize exception messages (#91)
1 parent c99b83e commit 0525872

16 files changed

+130
-105
lines changed

src/main/java/org/eclipse/keyple/core/service/AbstractObservableStateAdapter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ final void onActivate() {
129129
// launch the monitoringJob is necessary
130130
if (monitoringJob != null) {
131131
if (executorService == null) {
132-
throw new IllegalStateException("ExecutorService must be set");
132+
throw new IllegalStateException("ExecutorService is not set. Cannot launch monitoring job");
133133
}
134134
monitoringEvent = executorService.submit(monitoringJob.getMonitoringJob(this));
135135
}

src/main/java/org/eclipse/keyple/core/service/AbstractPluginAdapter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,7 @@ final LocalReaderAdapter buildLocalReaderAdapter(ReaderSpi readerSpi) {
8585
*/
8686
final void checkStatus() {
8787
if (!isRegistered) {
88-
throw new IllegalStateException(
89-
String.format("Plugin [%s] is not or no longer registered", pluginName));
88+
throw new IllegalStateException("Plugin '" + pluginName + "' is not or no longer registered");
9089
}
9190
}
9291

@@ -153,7 +152,7 @@ public final <T extends KeypleReaderExtension> T getReaderExtension(
153152
checkStatus();
154153
AbstractReaderAdapter reader = (AbstractReaderAdapter) getReader(readerName);
155154
if (reader == null) {
156-
throw new IllegalArgumentException("Reader [" + readerName + "] not found");
155+
throw new IllegalArgumentException("Reader '" + readerName + "' is not found");
157156
}
158157
return reader.getExtension(readerExtensionClass);
159158
}
@@ -213,7 +212,8 @@ public final CardReader findReader(String readerNameRegex) {
213212
return reader;
214213
}
215214
} catch (PatternSyntaxException e) {
216-
throw new IllegalArgumentException("readerNameRegex is invalid: " + e.getMessage(), e);
215+
throw new IllegalArgumentException(
216+
"Parameter 'readerNameRegex' has an invalid regex synthax: " + readerNameRegex, e);
217217
}
218218
}
219219
return null;

src/main/java/org/eclipse/keyple/core/service/AbstractReaderAdapter.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,10 @@ final List<CardSelectionResponseApi> transmitCardSelectionRequests(
128128
cardSelectors, cardSelectionRequests, multiSelectionProcessing, channelControl);
129129
} catch (UnexpectedStatusWordException e) {
130130
throw new CardBrokenCommunicationException(
131-
e.getCardResponse(), false, "An unexpected status word was received", e);
131+
e.getCardResponse(),
132+
false,
133+
"An unexpected status word was received during the processing of the card selection requests",
134+
e);
132135
} finally {
133136
if (logger.isDebugEnabled()) {
134137
long timeStamp = System.nanoTime();
@@ -153,8 +156,7 @@ final List<CardSelectionResponseApi> transmitCardSelectionRequests(
153156
*/
154157
final void checkStatus() {
155158
if (!isRegistered) {
156-
throw new IllegalStateException(
157-
String.format("This reader, %s, is not registered", getName()));
159+
throw new IllegalStateException("Reader '" + getName() + "' is not registered");
158160
}
159161
}
160162

src/main/java/org/eclipse/keyple/core/service/CardSelectionManagerAdapter.java

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,8 @@ public int prepareSelection(
9595

9696
if (!(cardSelectionExtension instanceof CardSelectionExtensionSpi)) {
9797
throw new IllegalArgumentException(
98-
"The provided 'cardSelectionExtension' must be an instance of 'CardSelectionExtensionSpi'");
98+
"Cannot cast 'cardSelectionExtension' to CardSelectionExtensionSpi. Actual type: "
99+
+ cardSelectionExtension.getClass().getName());
99100
}
100101

101102
/* keep the selection request */
@@ -205,7 +206,7 @@ public int importCardSelectionScenario(String cardSelectionScenario) {
205206
JsonUtil.getParser().fromJson(cardSelectorsJsonArray.get(i), classOfCardSelector);
206207
} catch (ClassNotFoundException e) {
207208
throw new IllegalArgumentException(
208-
"Original CardSelector type '" + cardSelectorsTypes.get(i) + "' not found", e);
209+
"Original CardSelector type '" + cardSelectorsTypes.get(i) + "' is not found", e);
209210
}
210211
CardSelectionExtension cardSelection;
211212
try {
@@ -217,7 +218,7 @@ public int importCardSelectionScenario(String cardSelectionScenario) {
217218
} catch (ClassNotFoundException e) {
218219
// Default card selection
219220
logger.warn(
220-
"Original CardSelection type '{}' not found. Replaced by default type '{}' for deserialization",
221+
"Original CardSelection type '{}' is not found. Replaced by default type '{}' for deserialization",
221222
cardSelectionsTypes.get(i),
222223
CardSelectionAdapter.class.getName());
223224
cardSelection =
@@ -282,7 +283,10 @@ public void scheduleCardSelectionScenario(
282283
((ObservableRemoteReaderAdapter) observableCardReader)
283284
.scheduleCardSelectionScenario(cardSelectionScenario, notificationMode);
284285
} else {
285-
throw new IllegalArgumentException("Not a Keyple reader implementation");
286+
throw new IllegalArgumentException(
287+
"Cannot cast 'observableCardReader' to ObservableLocalReaderAdapter or ObservableRemoteReaderAdapter. "
288+
+ "Actual type: "
289+
+ observableCardReader.getClass().getName());
286290
}
287291
}
288292

@@ -333,10 +337,15 @@ public CardSelectionResult importProcessedCardSelectionScenario(
333337
processedCardSelectionScenario,
334338
new TypeToken<ArrayList<CardSelectionResponseApi>>() {}.getType());
335339
} catch (JsonSyntaxException e) {
336-
throw new IllegalArgumentException("Input string is invalid: " + e.getMessage(), e);
340+
throw new IllegalArgumentException(
341+
"Parameter 'processedCardSelectionScenario' has an invalid JSON synthax: "
342+
+ processedCardSelectionScenario,
343+
e);
337344
}
338345
if (cardSelectionResponses == null) {
339-
throw new IllegalArgumentException("Input string is null or empty");
346+
throw new IllegalArgumentException(
347+
"Parameter 'processedCardSelectionScenario' is null or empty: "
348+
+ processedCardSelectionScenario);
340349
}
341350
return processCardSelectionResponses(cardSelectionResponses);
342351
}
@@ -366,7 +375,7 @@ private CardSelectionResult processCardSelectionResponses(
366375
smartCard = (SmartCard) cardSelections.get(index).parse(cardSelectionResponse);
367376
} catch (ParseException e) {
368377
throw new InvalidCardResponseException(
369-
"Error occurred while parsing the card response: " + e.getMessage(), e);
378+
"Failed to parse the card response: " + cardSelectionResponse, e);
370379
} catch (UnsupportedOperationException e) {
371380
logger.warn(
372381
"Unable to parse card selection responses due to missing card extensions in runtime environment");

src/main/java/org/eclipse/keyple/core/service/DistributedLocalServiceAdapter.java

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,6 @@ final class DistributedLocalServiceAdapter
4848
private static final Logger logger =
4949
LoggerFactory.getLogger(DistributedLocalServiceAdapter.class);
5050

51-
private static final String READER_NOT_FOUND_TEMPLATE =
52-
"There is no local reader registered with the name [%s] or the associated plugin is no longer registered";
53-
5451
private final String name;
5552
private final LocalServiceSpi localServiceSpi;
5653

@@ -78,7 +75,7 @@ final class DistributedLocalServiceAdapter
7875
public boolean isReaderContactless(String readerName) {
7976
CardReader reader = SmartCardServiceProvider.getService().findReader(Pattern.quote(readerName));
8077
if (reader == null) {
81-
throw new IllegalStateException(String.format(READER_NOT_FOUND_TEMPLATE, readerName));
78+
throw new IllegalStateException("Reader '" + readerName + "' is not registered");
8279
}
8380
return reader.isContactless();
8481
}
@@ -230,8 +227,7 @@ void unregister() {
230227
*/
231228
private void checkStatus() {
232229
if (!isRegistered) {
233-
throw new IllegalStateException(
234-
String.format("Service [%s] is not or no longer registered", name));
230+
throw new IllegalStateException("Local service '" + name + "' is not registered");
235231
}
236232
}
237233

@@ -255,7 +251,7 @@ private LocalReaderExecutor(String jsonData, String readerName) {
255251
(AbstractReaderAdapter)
256252
SmartCardServiceProvider.getService().findReader(Pattern.quote(readerName));
257253
if (reader == null) {
258-
throw new IllegalStateException(String.format(READER_NOT_FOUND_TEMPLATE, readerName));
254+
throw new IllegalStateException("Reader '" + readerName + "' is not registered");
259255
}
260256
input = JsonUtil.getParser().fromJson(jsonData, JsonObject.class);
261257
output = new JsonObject();
@@ -308,7 +304,7 @@ private String execute() {
308304
releaseChannel();
309305
break;
310306
default:
311-
throw new IllegalArgumentException(service.name());
307+
throw new IllegalArgumentException("Unsupported reader service: " + service.name());
312308
}
313309
} catch (Exception e) {
314310
output.add(JsonProperty.ERROR.getKey(), JsonUtil.getParser().toJsonTree(new BodyError(e)));
@@ -385,7 +381,7 @@ private void transmitCardSelectionRequests()
385381
JsonUtil.getParser().fromJson(cardSelectorsJsonArray.get(i), classOfCardSelector);
386382
} catch (ClassNotFoundException e) {
387383
throw new IllegalArgumentException(
388-
"Original CardSelector type " + cardSelectorsTypes.get(i) + " not found", e);
384+
"Original CardSelector type '" + cardSelectorsTypes.get(i) + "' is not found", e);
389385
}
390386
cardSelectors.add(cardSelector);
391387
}
@@ -430,8 +426,7 @@ private void scheduleCardSelectionScenario() {
430426
((ObservableRemoteReaderAdapter) reader)
431427
.scheduleCardSelectionScenario(cardSelectionScenario, notificationMode);
432428
} else {
433-
throw new IllegalStateException(
434-
String.format("Reader [%s] is not observable", reader.getName()));
429+
throw new IllegalStateException("Reader '" + reader.getName() + "' is not observable");
435430
}
436431
}
437432

@@ -552,7 +547,7 @@ private String execute() {
552547
stopReaderDetection();
553548
break;
554549
default:
555-
throw new IllegalArgumentException(service.name());
550+
throw new IllegalArgumentException("Unsupported plugin service: " + service.name());
556551
}
557552
} catch (Exception e) {
558553
output.add(JsonProperty.ERROR.getKey(), JsonUtil.getParser().toJsonTree(new BodyError(e)));
@@ -622,9 +617,7 @@ private void allocateReader() {
622617
PoolPlugin poolPlugin = getPoolPlugin(readerGroupReference);
623618
if (poolPlugin == null) {
624619
throw new IllegalStateException(
625-
String.format(
626-
"There is no local pool plugin registered having the reader group name [%s]",
627-
readerGroupReference));
620+
"No pool plugin is registered for reader group reference: " + readerGroupReference);
628621
}
629622
CardReader reader = poolPlugin.allocateReader(readerGroupReference);
630623

@@ -678,7 +671,8 @@ private void startReaderDetection() {
678671
}
679672
}
680673
if (!isObservationStarted) {
681-
throw new IllegalStateException("There is no observable local plugin");
674+
throw new IllegalStateException(
675+
"There is no observable local plugin. Unable to start reader detection");
682676
}
683677
}
684678

src/main/java/org/eclipse/keyple/core/service/DistributedUtilAdapter.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -156,9 +156,10 @@ private static JsonObject getJsonObject(String outputJson) throws Exception { //
156156
throw new UnexpectedStatusWordException(null, false, message);
157157
} else {
158158
throw new RuntimeException(
159-
String.format(
160-
"The distributed message sender received an unknown error: code: %s, message: %s",
161-
code, message));
159+
"The distributed message sender received an unknown error: code="
160+
+ code
161+
+ ", message="
162+
+ message);
162163
}
163164
} else {
164165
// Standard error.
@@ -178,9 +179,7 @@ private static JsonObject getJsonObject(String outputJson) throws Exception { //
178179
*/
179180
static void throwRuntimeException(Exception e) {
180181
throw new RuntimeException( // NOSONAR
181-
String.format(
182-
"The distributed message sender received an unexpected error: %s", e.getMessage()),
183-
e);
182+
"The distributed message sender received an unexpected error", e);
184183
}
185184

186185
/**

src/main/java/org/eclipse/keyple/core/service/InternalDto.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public CardSelectionRequestSpi getCardSelectionRequest() {
6161

6262
@Override
6363
public SmartCardSpi parse(CardSelectionResponseApi cardSelectionResponseApi) {
64-
throw new UnsupportedOperationException("Method not supported for internal DTO");
64+
throw new UnsupportedOperationException("Method 'parse' is not supported for internal DTO");
6565
}
6666

6767
@Override

src/main/java/org/eclipse/keyple/core/service/JsonAdapter.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,9 +87,10 @@ public AbstractApduException deserialize(
8787
exceptionClass = (Class<? extends AbstractApduException>) Class.forName(type.getTypeName());
8888
} catch (ClassNotFoundException e) {
8989
throw new JsonParseException(
90-
String.format(
91-
"Exception [%s] not founded in runtime environment. Original message: %s",
92-
type, message));
90+
"Exception '"
91+
+ type
92+
+ "' is not found in runtime environment. Original message: "
93+
+ message);
9394
}
9495

9596
try {
@@ -100,12 +101,10 @@ public AbstractApduException deserialize(
100101

101102
} catch (NoSuchMethodException e) {
102103
throw new JsonParseException(
103-
String.format(
104-
"No valid constructor found for exception [%s] with message [%s]", type, message));
104+
"No valid constructor found for exception '" + type + "' with message: " + message, e);
105105
} catch (InvocationTargetException | InstantiationException | IllegalAccessException e) {
106106
throw new JsonParseException(
107-
String.format(
108-
"Error while trying to build exception [%s] with message [%s]", type, message));
107+
"Failed to build exception '" + type + "' with message: " + message, e);
109108
}
110109
}
111110
}
@@ -284,7 +283,7 @@ public CardSelectionScenarioAdapter deserialize(
284283
.fromJson(cardSelectorsJsonArray.get(i), classOfCardSelector));
285284
} catch (ClassNotFoundException e) {
286285
throw new IllegalArgumentException(
287-
"Original CardSelector type [" + cardSelectorsTypes.get(i) + "] not found", e);
286+
"Original CardSelector type '" + cardSelectorsTypes.get(i) + "' is not found", e);
288287
}
289288
}
290289

src/main/java/org/eclipse/keyple/core/service/LocalPoolPluginAdapter.java

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,7 @@ public SortedSet<String> getReaderGroupReferences() {
7676
return poolPluginSpi.getReaderGroupReferences();
7777
} catch (PluginIOException e) {
7878
throw new KeyplePluginException(
79-
String.format(
80-
"Pool plugin [%s] is unable to get reader group references: %s",
81-
getName(), e.getMessage()),
82-
e);
79+
"Plugin '" + getName() + "' failed to retrieve reader group references", e);
8380
}
8481
}
8582

@@ -105,9 +102,10 @@ public CardReader allocateReader(String readerGroupReference) {
105102
readerSpi = poolPluginSpi.allocateReader(readerGroupReference);
106103
} catch (PluginIOException e) {
107104
throw new KeyplePluginException(
108-
String.format(
109-
"Pool plugin [%s] unable to allocate reader of reader group reference [%s]: %s",
110-
getName(), readerGroupReference, e.getMessage()),
105+
"Plugin '"
106+
+ getName()
107+
+ "' failed to allocate reader of reader group reference: "
108+
+ readerGroupReference,
111109
e);
112110
}
113111

@@ -152,10 +150,7 @@ public void releaseReader(CardReader reader) {
152150
((LocalReaderAdapter) reader).getReaderSpi()); // NOSONAR nullity check is done above
153151
} catch (PluginIOException e) {
154152
throw new KeyplePluginException(
155-
String.format(
156-
"Pool plugin [%s] unable to release reader [%s]: %s",
157-
getName(), reader.getName(), e.getMessage()),
158-
e);
153+
"Plugin '" + getName() + "' failed to release reader: " + reader.getName(), e);
159154
} finally {
160155
getReadersMap().remove(reader.getName());
161156
((LocalReaderAdapter) reader).unregister();

0 commit comments

Comments
 (0)