import java.util.Optional;
import java.util.concurrent.ExecutionException;
import java.util.function.Function;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
import static java.lang.String.format;
public class OAuthRestClient {
+ public static final String REL_NEXT = "rel=\"next\"";
private static final int DEFAULT_PAGE_SIZE = 100;
- private static final Pattern NEXT_LINK_PATTERN = Pattern.compile(".*<(.*)>; rel=\"next\"");
private OAuthRestClient() {
// Only static method
}
private static Optional<String> readNextEndPoint(Response response) {
- Optional<String> link = response.getHeaders().entrySet().stream()
+ Optional<String> linksHeader = response.getHeaders().entrySet().stream()
.filter(e -> "Link".equalsIgnoreCase(e.getKey()))
.map(Map.Entry::getValue)
.findAny();
- if (link.isEmpty() || link.get().isEmpty() || !link.get().contains("rel=\"next\"")) {
+
+ if (linksHeader.isEmpty()) {
return Optional.empty();
}
- Matcher nextLinkMatcher = NEXT_LINK_PATTERN.matcher(link.get());
- if (!nextLinkMatcher.find()) {
- return Optional.empty();
+
+ String[] links = linksHeader.get().split(",");
+ for (String link : links) {
+ String trimmedLink = link.trim();
+ if (trimmedLink.contains(REL_NEXT) && trimmedLink.contains("<") && trimmedLink.contains(">")) {
+ String nextUrl = trimmedLink.substring(trimmedLink.indexOf("<") + 1, trimmedLink.indexOf(">"));
+ return Optional.of(nextUrl);
+ }
}
- return Optional.of(nextLinkMatcher.group(1));
+ return Optional.empty();
}
private static IllegalStateException unexpectedResponseCode(String requestUrl, Response response) throws IOException {