Hi @tejaswi_aem,
You can customize the requirement as below:
Step 1: Refined URIUtils
Class
package com.ontariohealth.core.utils;
import org.apache.commons.lang3.StringUtils;
public final class URIUtils {
private URIUtils() {}
public static String normalizeLink(String uri) {
return StringUtils.isNotBlank(uri) ? processUri(uri) : uri;
}
public static String processUri(String uri) {
if (StringUtils.startsWith(uri, "/content/")) {
return processContentUri(uri);
} else {
if (StringUtils.startsWith(uri, "www")) return addHttpPrefix(uri);
return uri;
}
}
public static String processContentUri(String uri) {
String extension = getExtension(uri);
if (StringUtils.isBlank(extension) ||
!StringUtils.equalsAnyIgnoreCase(extension, "json", "html", "en")) {
if (uri.contains("?")) {
uri = uri.replace("?", ".html?");
} else if (uri.contains("#")) {
uri = uri.replace("#", ".html#");
} else {
uri += ".html";
}
}
return uri;
}
public static String addHttpPrefix(String uri) {
return StringUtils.startsWithAnyIgnoreCase(uri, "http://", "https://") ? uri : "https://" + uri;
}
public static String getExtension(String uri) {
String path = uri.split("\\?")[0].split("#")[0];
int lastDot = path.lastIndexOf(".");
return lastDot != -1 ? path.substring(lastDot + 1) : "";
}
}
package com.ontariohealth.core.models;
import com.ontariohealth.core.utils.URIUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.sling.api.resource.Resource;
import org.apache.sling.models.annotations.DefaultInjectionStrategy;
import org.apache.sling.models.annotations.Model;
import org.apache.sling.models.annotations.injectorspecific.ValueMapValue;
import javax.annotation.PostConstruct;
@Model(adaptables = Resource.class, defaultInjectionStrategy = DefaultInjectionStrategy.OPTIONAL)
public class LinkModel {
@ValueMapValue
private String link;
private String normalizedLink;
@PostConstruct
protected void init() {
if (StringUtils.isNotBlank(link)) {
normalizedLink = URIUtils.normalizeLink(link);
}
}
public String getLink() {
return normalizedLink;
}
}
<a href="${model.link}" target="_blank">${model.link}</a>
Make sure to use data-sly-use.model="com.ontariohealth.core.models.LinkModel"
in your component.
Step 4: Disable AEM Link Checker for External Links (via OSGi)
Create this config at:
/apps/your-project/config.author/com.day.cq.rewriter.linkchecker.impl.LinkCheckerTransformerFactory.config
linkcheckertransformer.disableExternal=true
This disables broken link validation on authored external URLs like https://abc.com/test
— regardless of whether they have .html
.
If deploying to AEM as a Cloud Service, this config goes under:
/apps/your-project/osgiconfig/config.author
Santosh Sai

