diff --git a/src/main/java/fr/osug/doi/ProcessUrlPipeline.java b/src/main/java/fr/osug/doi/ProcessUrlPipeline.java index 31051bf5dc0d3fa8e2f4688b5f4f020b90237f58..91c1cc3d86d22bd834b83512ef79b98437e823ae 100644 --- a/src/main/java/fr/osug/doi/ProcessUrlPipeline.java +++ b/src/main/java/fr/osug/doi/ProcessUrlPipeline.java @@ -91,13 +91,13 @@ public final class ProcessUrlPipeline extends AbstractPipeline<PipelineCommonDat if (dataAccessUrl == null) { doiData.addError("Missing data access url"); } else { - checkUrl(doiData, dataAccessUrl); + checkUrl(doiData, dataAccessUrl, true); } // Get external Landing page URL: final String landingPageExtUrl = projectConfig.getUrlLandingPage(doiSuffix); if (landingPageExtUrl != null) { - checkUrl(doiData, landingPageExtUrl); + checkUrl(doiData, landingPageExtUrl, false); logger.debug("landingPageUrl: {}", landingPageExtUrl); } @@ -113,12 +113,12 @@ public final class ProcessUrlPipeline extends AbstractPipeline<PipelineCommonDat logger.info("processUrls: done"); } - private void checkUrl(final PipelineCommonDoiData doiData, final String url) { + private void checkUrl(final PipelineCommonDoiData doiData, final String url, final boolean binary) { logger.debug("checkUrl: {}", url); Integer check = checkUrlCache.get(url); if (check == null) { - final String doc = doiConfig.getUrlChecker().getResource(url); + final String doc = doiConfig.getUrlChecker().getResource(url, binary); check = checkDocument(doc); checkUrlCache.put(url, check); } diff --git a/src/main/java/fr/osug/doi/service/UrlChecker.java b/src/main/java/fr/osug/doi/service/UrlChecker.java index 02342def34108fa817299c7431fed73280806a61..aae62b21695f178a28f66f3557a38b2d62a310ab 100644 --- a/src/main/java/fr/osug/doi/service/UrlChecker.java +++ b/src/main/java/fr/osug/doi/service/UrlChecker.java @@ -9,6 +9,7 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.http.HttpHeaders; import org.springframework.web.client.RestClientException; /** @@ -38,16 +39,30 @@ public class UrlChecker { 200 OK - operation successful @param url resource to load - @return + @param headOnly true to only retrieve content-type + @return resource as string or Content-Type header if headOnly is true */ - public String getResource(final String url) { + public String getResource(final String url, final boolean headOnly) { // Note: url must not be encoded (%) if (url.contains("%")) { logger.info("Url is encoded (may cause problem with HTTP request) : {}", url); } String response = null; try { - response = this.restTemplate.getForObject(url, String.class); + logger.debug("getResource: {}", url); + + if (headOnly) { + final HttpHeaders headers = this.restTemplate.headForHeaders(url); + + if (headers != null) { + if (logger.isDebugEnabled()) { + logger.debug("headers: {}", headers.values()); + } + response = headers.getContentType().toString(); + } + } else { + response = this.restTemplate.getForObject(url, String.class); + } } catch (RestClientException rce) { logger.error("getResource: failed", rce); }