From 15ca4a30224e63ea3b78080d9e1490c0fd74c2b5 Mon Sep 17 00:00:00 2001 From: 11BelowStudio <60523642+11BelowStudio@users.noreply.github.com> Date: Fri, 9 Jan 2026 16:07:17 +0000 Subject: [PATCH 1/2] It is now possible to access the actual error responses from the Neocities API. --- .../java/org/neocities/api/BaseResponse.java | 1 + .../org/neocities/api/NeoCitiesApiError.java | 24 +++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/neocities/api/BaseResponse.java b/src/main/java/org/neocities/api/BaseResponse.java index f15ebcc..b5d953c 100644 --- a/src/main/java/org/neocities/api/BaseResponse.java +++ b/src/main/java/org/neocities/api/BaseResponse.java @@ -3,6 +3,7 @@ public class BaseResponse { public static final String SUCCESS = "success"; + public static final String ERROR = "error"; private String result; private String error_type; diff --git a/src/main/java/org/neocities/api/NeoCitiesApiError.java b/src/main/java/org/neocities/api/NeoCitiesApiError.java index bebec59..ce91108 100644 --- a/src/main/java/org/neocities/api/NeoCitiesApiError.java +++ b/src/main/java/org/neocities/api/NeoCitiesApiError.java @@ -2,6 +2,12 @@ public class NeoCitiesApiError extends RuntimeException { + /** + * The actual error response from the neocities API. + * Will be null if this exception was not built from a response. + */ + private final BaseResponse error; + public static NeoCitiesApiError fromResponse(final BaseResponse instance) { final String message = new StringBuilder("API returned unexpected result: '") .append(instance.getResult()) @@ -11,14 +17,28 @@ public static NeoCitiesApiError fromResponse(final BaseResponse instance) { .append(instance.getMessage()) .append(").") .toString(); - return new NeoCitiesApiError(message); + return new NeoCitiesApiError(message, instance); } - public NeoCitiesApiError(final String message) { + private NeoCitiesApiError(final String message, final BaseResponse instance){ super(message); + error = instance; + } + + public NeoCitiesApiError(final String message) { + this(message, null); } public NeoCitiesApiError(final Throwable cause) { super(cause); + error = null; + } + + /** + * Provides access to the error response from Neocities (if present) + * @return BaseResponse if this represents a response from neocities, null otherwise. + */ + public BaseResponse getError() { + return error; } } From 2c566323bb0ad2c67ed8c7b94b5819a6f5cd8af3 Mon Sep 17 00:00:00 2001 From: 11BelowStudio <60523642+11BelowStudio@users.noreply.github.com> Date: Mon, 12 Jan 2026 21:05:12 +0000 Subject: [PATCH 2/2] Added a safer method of accessing the BaseResponse (if present), whilst keeping the unsafe direct method of accessing it available. --- .../java/org/neocities/api/NeoCitiesApiError.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/neocities/api/NeoCitiesApiError.java b/src/main/java/org/neocities/api/NeoCitiesApiError.java index ce91108..ec6ccbe 100644 --- a/src/main/java/org/neocities/api/NeoCitiesApiError.java +++ b/src/main/java/org/neocities/api/NeoCitiesApiError.java @@ -1,12 +1,14 @@ package org.neocities.api; +import java.util.Optional; + public class NeoCitiesApiError extends RuntimeException { /** * The actual error response from the neocities API. * Will be null if this exception was not built from a response. */ - private final BaseResponse error; + public final BaseResponse error; public static NeoCitiesApiError fromResponse(final BaseResponse instance) { final String message = new StringBuilder("API returned unexpected result: '") @@ -35,10 +37,10 @@ public NeoCitiesApiError(final Throwable cause) { } /** - * Provides access to the error response from Neocities (if present) - * @return BaseResponse if this represents a response from neocities, null otherwise. + * Safely provides access to the error response from Neocities (if present) + * @return the value of {@link NeoCitiesApiError#error} wrapped in an {@link Optional} */ - public BaseResponse getError() { - return error; + public Optional getError() { + return Optional.ofNullable(error); } }