diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java b/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java
index 01910923..87468502 100644
--- a/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java
+++ b/acme4j-client/src/main/java/org/shredzone/acme4j/Account.java
@@ -196,9 +196,7 @@ public class Account extends AcmeJsonResource {
conn.sendSignedRequest(newAuthzUrl, claims, getLogin());
- var authLocation = conn.getLocation()
- .orElseThrow(() -> new AcmeProtocolException("Server did not provide an authorization location"));
- var auth = getLogin().bindAuthorization(authLocation);
+ var auth = getLogin().bindAuthorization(conn.getLocation());
auth.setJSON(conn.readJsonResponse());
return auth;
}
diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/AccountBuilder.java b/acme4j-client/src/main/java/org/shredzone/acme4j/AccountBuilder.java
index 4986860c..75e1f65e 100644
--- a/acme4j-client/src/main/java/org/shredzone/acme4j/AccountBuilder.java
+++ b/acme4j-client/src/main/java/org/shredzone/acme4j/AccountBuilder.java
@@ -26,7 +26,6 @@ import javax.crypto.spec.SecretKeySpec;
import edu.umd.cs.findbugs.annotations.Nullable;
import org.shredzone.acme4j.connector.Resource;
import org.shredzone.acme4j.exception.AcmeException;
-import org.shredzone.acme4j.exception.AcmeProtocolException;
import org.shredzone.acme4j.toolbox.AcmeUtils;
import org.shredzone.acme4j.toolbox.JSONBuilder;
import org.shredzone.acme4j.toolbox.JoseUtils;
@@ -261,10 +260,7 @@ public class AccountBuilder {
conn.sendSignedRequest(resourceUrl, claims, session, keyPair);
- var location = conn.getLocation()
- .orElseThrow(() -> new AcmeProtocolException("Server did not provide an account location"));
-
- var login = new Login(location, keyPair, session);
+ var login = new Login(conn.getLocation(), keyPair, session);
login.getAccount().setJSON(conn.readJsonResponse());
return login;
}
diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java b/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java
index a333cce6..841f246a 100644
--- a/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java
+++ b/acme4j-client/src/main/java/org/shredzone/acme4j/OrderBuilder.java
@@ -314,10 +314,7 @@ public class OrderBuilder {
conn.sendSignedRequest(session.resourceUrl(Resource.NEW_ORDER), claims, login);
- var orderLocation = conn.getLocation()
- .orElseThrow(() -> new AcmeProtocolException("Server did not provide an order location"));
-
- var order = new Order(login, orderLocation);
+ var order = new Order(login, conn.getLocation());
order.setJSON(conn.readJsonResponse());
return order;
}
diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java
index 1935fe86..cbd58bed 100644
--- a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java
+++ b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/Connection.java
@@ -169,9 +169,11 @@ public interface Connection extends AutoCloseable {
*
* Relative links are resolved against the last request's URL.
*
- * @return Location {@link URL}, or empty if no Location header was set
+ * @return Location {@link URL}
+ * @throws org.shredzone.acme4j.exception.AcmeProtocolException if the location
+ * header is missing
*/
- Optional getLocation();
+ URL getLocation();
/**
* Returns the content of the last-modified header, if present.
diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java
index cdb0059f..e80a4d4a 100644
--- a/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java
+++ b/acme4j-client/src/main/java/org/shredzone/acme4j/connector/DefaultConnection.java
@@ -258,14 +258,15 @@ public class DefaultConnection implements Connection {
}
@Override
- public Optional getLocation() {
+ public URL getLocation() {
return getResponse().headers()
.firstValue(LOCATION_HEADER)
.map(l -> {
LOG.debug("Location: {}", l);
return l;
})
- .map(this::resolveRelative);
+ .map(this::resolveRelative)
+ .orElseThrow(() -> new AcmeProtocolException("location header is missing"));
}
@Override
diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountBuilderTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountBuilderTest.java
index 41b1f22b..173ba5db 100644
--- a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountBuilderTest.java
+++ b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountBuilderTest.java
@@ -21,7 +21,6 @@ import static org.shredzone.acme4j.toolbox.TestUtils.url;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyPair;
-import java.util.Optional;
import org.jose4j.jwx.CompactSerializer;
import org.junit.jupiter.api.Test;
@@ -72,8 +71,8 @@ public class AccountBuilderTest {
}
@Override
- public Optional getLocation() {
- return Optional.of(locationUrl);
+ public URL getLocation() {
+ return locationUrl;
}
@Override
@@ -134,8 +133,8 @@ public class AccountBuilderTest {
}
@Override
- public Optional getLocation() {
- return Optional.of(locationUrl);
+ public URL getLocation() {
+ return locationUrl;
}
@Override
@@ -176,8 +175,8 @@ public class AccountBuilderTest {
}
@Override
- public Optional getLocation() {
- return Optional.of(locationUrl);
+ public URL getLocation() {
+ return locationUrl;
}
@Override
diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java
index c205d49e..b052b0a4 100644
--- a/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java
+++ b/acme4j-client/src/test/java/org/shredzone/acme4j/AccountTest.java
@@ -27,7 +27,6 @@ import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.util.Collection;
-import java.util.Optional;
import java.util.concurrent.atomic.AtomicBoolean;
import org.jose4j.jws.JsonWebSignature;
@@ -88,8 +87,8 @@ public class AccountTest {
}
@Override
- public Optional getLocation() {
- return Optional.of(locationUrl);
+ public URL getLocation() {
+ return locationUrl;
}
@Override
@@ -145,8 +144,8 @@ public class AccountTest {
}
@Override
- public Optional getLocation() {
- return Optional.of(locationUrl);
+ public URL getLocation() {
+ return locationUrl;
}
@Override
@@ -199,8 +198,8 @@ public class AccountTest {
}
@Override
- public Optional getLocation() {
- return Optional.of(locationUrl);
+ public URL getLocation() {
+ return locationUrl;
}
};
@@ -327,8 +326,8 @@ public class AccountTest {
}
@Override
- public Optional getLocation() {
- return Optional.of(locationUrl);
+ public URL getLocation() {
+ return locationUrl;
}
};
@@ -424,8 +423,8 @@ public class AccountTest {
}
@Override
- public Optional getLocation() {
- return Optional.of(locationUrl);
+ public URL getLocation() {
+ return locationUrl;
}
};
diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/OrderBuilderTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/OrderBuilderTest.java
index 5c76120e..18a25ef2 100644
--- a/acme4j-client/src/test/java/org/shredzone/acme4j/OrderBuilderTest.java
+++ b/acme4j-client/src/test/java/org/shredzone/acme4j/OrderBuilderTest.java
@@ -25,7 +25,6 @@ import java.net.InetAddress;
import java.net.URL;
import java.time.Duration;
import java.util.Arrays;
-import java.util.Optional;
import org.assertj.core.api.AutoCloseableSoftAssertions;
import org.junit.jupiter.api.Test;
@@ -67,8 +66,8 @@ public class OrderBuilderTest {
}
@Override
- public Optional getLocation() {
- return Optional.of(locationUrl);
+ public URL getLocation() {
+ return locationUrl;
}
};
@@ -150,8 +149,8 @@ public class OrderBuilderTest {
}
@Override
- public Optional getLocation() {
- return Optional.of(locationUrl);
+ public URL getLocation() {
+ return locationUrl;
}
};
diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DefaultConnectionTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DefaultConnectionTest.java
index 60215174..79c11c70 100644
--- a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DefaultConnectionTest.java
+++ b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DefaultConnectionTest.java
@@ -18,6 +18,7 @@ import static java.time.temporal.ChronoUnit.SECONDS;
import static com.github.tomakehurst.wiremock.client.WireMock.*;
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.shredzone.acme4j.toolbox.TestUtils.getResourceAsByteArray;
import static org.shredzone.acme4j.toolbox.TestUtils.url;
@@ -215,8 +216,7 @@ public class DefaultConnectionTest {
try (var conn = session.connect()) {
conn.sendRequest(requestUrl, session, null);
var location = conn.getLocation();
- assertThat(location.orElseThrow())
- .isEqualTo(new URL("https://example.com/otherlocation"));
+ assertThat(location).isEqualTo(new URL("https://example.com/otherlocation"));
}
}
@@ -232,8 +232,7 @@ public class DefaultConnectionTest {
try (var conn = session.connect()) {
conn.sendRequest(requestUrl, session, null);
var location = conn.getLocation();
- assertThat(location.orElseThrow())
- .isEqualTo(new URL(baseUrl + "/otherlocation"));
+ assertThat(location).isEqualTo(new URL(baseUrl + "/otherlocation"));
}
}
@@ -300,7 +299,8 @@ public class DefaultConnectionTest {
try (var conn = session.connect()) {
conn.sendRequest(requestUrl, session, null);
- assertThat(conn.getLocation()).isEmpty();
+ assertThatExceptionOfType(AcmeProtocolException.class)
+ .isThrownBy(conn::getLocation);
}
verify(getRequestedFor(urlEqualTo(REQUEST_PATH)));
diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java
index 1ce01998..77cf419f 100644
--- a/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java
+++ b/acme4j-client/src/test/java/org/shredzone/acme4j/connector/DummyConnection.java
@@ -85,7 +85,7 @@ public class DummyConnection implements Connection {
}
@Override
- public Optional getLocation() {
+ public URL getLocation() {
throw new UnsupportedOperationException();
}