Обнюхивание контента - один из методов. Но обратите внимание, что Atom использует пространства имен, и вы создаете парсер, не поддерживающий пространство имен.
public boolean isAtom(String URL) throws ParserConfigurationException, SAXException, IOException{
DocumentBuilderFactory f = DocumentBuilderFActory.newInstance();
f.setNamespaceAware(true);
DocumentBuilder builder = f.newInstance().newDocumentBuilder();
Document doc = builder.parse(URL);
Element e = doc.getDocumentElement();
return e.getLocalName().equals("feed") &&
e.getNamespaceURI().equals("http://www.w3.org/2005/Atom");
}
Обратите внимание, что вы не можете сравнивать с помощью equalsIgnorCase (), поскольку имена элементов XML чувствительны к регистру.
Другой метод заключается в реакции на заголовок Content-Type, если он доступен в HTTP-запросе GET. Тип контента для ATOM будет application/atom+xml
, а для RSS application/rss+xml
. Однако я подозреваю, что не всем RSS-каналам можно доверять, чтобы корректно установить этот заголовок.
Третий вариант - посмотреть суффикс URL, например, .atom и .rss.
Последние два метода легко настраиваются, если вы используете Spring или JAX-RS