2016-09-14 19 views
-1

外部サービスからの応答をhtml形式で受け取り、フロントエンドに直接渡します。しかし、いつか外部システムが壊れたhtmlを返すと、私のサイトのページが壊れてしまうことがあります。そこで、このhtml応答が壊れているか有効であるかどうかを検証したいと思います。それが有効であれば、私はそれをさらに渡します。そうでなければ、ログのエラーで無視されます。バックエンドでのHTML検証

どのような手段で有効にすることができますかバックエンドで Javaでですか?

ありがとうございます。

+0

本当の問題は、ありますなぜあなたのバックエンドの要求が死んでいる/壊れたリンクを返すのですか? – Fallenreaper

+0

http://stackoverflow.com/questions/4217801/a-html-validator-in-javaこの質問をチェック! –

答えて

0

を使用してHTMLを検証するために、独自のパーサを構築することができ、私は解決策を見つけた:

private static boolean isValidHtml(String htmlToValidate) throws ParserConfigurationException, 
     SAXException, IOException { 
    String docType = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" " + 
      "\"https://www.w3.org/TR/xhtml11/DTD/xhtml11-flat.dtd\"> " + 
      "<html xmlns=\"http://www.w3.org/1999/xhtml\" " + "xml:lang=\"en\">\n"; 

    try { 
     InputSource inputSource = new InputSource(new StringReader(docType + htmlToValidate)); 

     DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); 
     domFactory.setValidating(true); 
     DocumentBuilder builder = domFactory.newDocumentBuilder(); 
     builder.setErrorHandler(new ErrorHandler() { 
      @Override 
      public void error(SAXParseException exception) throws SAXException { 
       throw new SAXException(exception); 
      } 

      @Override 
      public void fatalError(SAXParseException exception) throws SAXException { 
       throw new SAXException(exception); 
      } 

      @Override 
      public void warning(SAXParseException exception) throws SAXException { 
       throw new SAXException(exception); 
      } 
     }); 

     builder.parse(inputSource); 
    } catch (SAXException ex) { 
     //log.error(ex.getMessage(), ex); // validation message 
     return false; 
    } 

    return true; 
} 

このメソッドは、この方法を使用することができます。

String htmlToValidate = "<head><title></title></head><body></body></html>"; 

    boolean isValidHtml = isValidHtml(htmlToValidate); 
関連する問題