AutoPagerizeXPathSyntaxChecker.java
package net.sasasin.sreader.service.autopagerize;
import java.util.Objects;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.springframework.stereotype.Component;
/**
* Validates XPath syntax via the same jsoup {@link Document#selectXpath(String)} path used at
* runtime. Empty selection is valid; only syntax / evaluation exceptions fail.
*/
@Component
public class AutoPagerizeXPathSyntaxChecker {
private static final Document EMPTY_DOCUMENT = Jsoup.parse("<html><body></body></html>");
/**
* @return empty when syntax is acceptable; otherwise a short diagnostic message
*/
public String validateSyntax(String xpath) {
Objects.requireNonNull(xpath, "xpath must not be null");
try {
EMPTY_DOCUMENT.selectXpath(xpath);
return null;
} catch (RuntimeException e) {
String message = e.getMessage();
if (message == null || message.isBlank()) {
return e.getClass().getSimpleName();
}
return message;
}
}
public boolean isSyntacticallyValid(String xpath) {
return validateSyntax(xpath) == null;
}
}