使用sonarqube报告XML解析问题

时间:2016-04-14 14:57:25

标签: xml sonarqube

我们希望使用sonarqube对XML文件进行代码质量审核。

我们已经设置了一个sonarqube服务器,添加了xml插件并在示例XML文件上运行了sonar runner。

版本: sonarqube-5.4 XML插件v 1.4.1

在示例xml文件中添加一个选项卡(带有活动" Tab规则"),可以在sonarqube网站上看到警告。

当我破坏XML文件时,删除结束标记

<!---</sonar-config>-->.

导致声纳跑步者日志的错误消息:

信息:无法分析文件C:/ Build automation / sonar-examples-master / projects / l anguages / XML / XML的声纳浇道/ SRC / sonar_backup.xml 信息:原因:org.xml.sax.SAXParseException; lineNumber:233; columnNumber:24; X ML文档结构必须在同一实体内开始和结束。 信息:传感器XmlSensor(完成)|时间= 250ms的 信息:传感器XmlFileSensor 信息:1个要分析的源文件 错误:无法解析xml文件:C:\ Build automation \ sonar-examples-master \ proje CTS \语言\ XML \ XML-声纳浇道\ SRC \ sonar_backup.xml

因此,在声纳Web界面中没有报告添加的Tab和缺少的结束语句,只是在通知中跳过了损坏的xml。

有人可以给我这方面的支持吗? 我们需要在网络界面中由声纳报告损坏的XML文件。

到目前为止,我在论坛中找不到有关此问题的信息。

谢谢和问候 马丁

以下是corrpted XML文件的副本:

<?xml version="1.0" encoding="UTF-8"?>
<sonar-config>
    <version><![CDATA[321]]></version>
  <date><![CDATA[2012-08-08]]></date>
  <metrics/>
  <properties>
    <property>
      <key><![CDATA[java.vm.version]]></key>
      <value><![CDATA[20.0-b12]]></value>
    </property>
    <property>
      <key><![CDATA[wrapper.jvm.port.max]]></key>
      <value><![CDATA[31999]]></value>
    </property>
    <property>
      <key><![CDATA[java.vendor.url]]></key>
      <value><![CDATA[http://java.sun.com/]]></value>
    </property>
    <property>
      <key><![CDATA[JAVA_HOME]]></key>
      <value><![CDATA[C:\Program Files\Java\jdk1.6.0_27]]></value>
    </property>
  </properties>
  <profiles>
    <profile>
      <name><![CDATA[Sonar way]]></name>
      <version><![CDATA[1]]></version>
      <default-profile><![CDATA[true]]></default-profile>
      <provided><![CDATA[true]]></provided>
      <enabled><![CDATA[true]]></enabled>
      <used><![CDATA[false]]></used>
      <language><![CDATA[web]]></language>
      <active-rules>
        <active-rule>
          <key><![CDATA[AvoidHtmlCommentCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
        </active-rule>
        <active-rule>
          <key><![CDATA[DynamicJspIncludeCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[CRITICAL]]></level>
        </active-rule>
        <active-rule>
          <key><![CDATA[IllegalTagLibsCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[CRITICAL]]></level>
          <params>
            <param>
              <key><![CDATA[tagLibs]]></key>
              <value><![CDATA[http://java.sun.com/jstl/sql]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[InlineStyleCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
        </active-rule>
        <active-rule>
          <key><![CDATA[InternationalizationCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
          <params>
            <param>
              <key><![CDATA[attributes]]></key>
              <value><![CDATA[outputLabel.value, outputText.value]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[JspScriptletCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[CRITICAL]]></level>
        </active-rule>
        <active-rule>
          <key><![CDATA[LibraryDependencyCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[CRITICAL]]></level>
          <params>
            <param>
              <key><![CDATA[libraries]]></key>
              <value><![CDATA[java.sql,javax.sql]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[LongJavaScriptCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[CRITICAL]]></level>
          <params>
            <param>
              <key><![CDATA[maxLines]]></key>
              <value><![CDATA[5]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[MultiplePageDirectivesCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
        </active-rule>
        <active-rule>
          <key><![CDATA[WhiteSpaceAroundCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
        </active-rule>
        <active-rule>
          <key><![CDATA[FileLengthCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
          <params>
            <param>
              <key><![CDATA[maxLength]]></key>
              <value><![CDATA[500]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[ComplexityCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
          <params>
            <param>
              <key><![CDATA[tags]]></key>
              <value><![CDATA[catch, choose, if, forEach, forTokens,when]]></value>
            </param>
            <param>
              <key><![CDATA[operators]]></key>
              <value><![CDATA[&&, ||, and,or]]></value>
            </param>
            <param>
              <key><![CDATA[max]]></key>
              <value><![CDATA[12]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[DocTypeCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
          <params>
            <param>
              <key><![CDATA[dtd]]></key>
              <value><![CDATA[http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[DoubleQuotesCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
        </active-rule>
        <active-rule>
          <key><![CDATA[IllegalAttributeCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MAJOR]]></level>
          <params>
            <param>
              <key><![CDATA[attributes]]></key>
              <value><![CDATA[CAPTION.align, IFRAME.align, IMG.align, INPUT.align, OBJECT.align,
            LEGEND.align, TABLE.align, HR.align,
            DIV.align, H1.align, H2.align, H3.align, H4.align, H5.align, H6.align, P.align,
            alink, background, bgcolor,
            IMG.border, OBJECT.border, clear, color, compact, face, hspace, TD.height, TH.height,
            language, link,
            noshade, nowrap, HR.size, FONT.size, start, text, LI.type, OL.type, UL.type, LI.value,
            version,
            HR.width,
            PRE.width, TD.width, TH.width]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[IllegalElementCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MAJOR]]></level>
          <params>
            <param>
              <key><![CDATA[elements]]></key>
              <value><![CDATA[applet, basefont, center, dir, font, isindex, menu, s, strike, u]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[IllegalTabCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
        </active-rule>
        <active-rule>
          <key><![CDATA[MaxLineLengthCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
          <params>
            <param>
              <key><![CDATA[maxLength]]></key>
              <value><![CDATA[120]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[RequiredAttributeCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MAJOR]]></level>
          <params>
            <param>
              <key><![CDATA[attributes]]></key>
              <value><![CDATA[img.alt,script.type]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
          <key><![CDATA[UnclosedTagCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MINOR]]></level>
          <params>
            <param>
              <key><![CDATA[ignoreTags]]></key>
              <value><![CDATA[verbatim]]></value>
            </param>
          </params>
        </active-rule>
        <active-rule>
            <key><![CDATA[AvoidCommentedOutCodeCheck]]></key>
          <plugin><![CDATA[Web]]></plugin>
          <level><![CDATA[MAJOR]]></level>
        </active-rule>
      </active-rules>
      <alerts/>
    </profile>
  </profiles>
  <rules/>
<!---</sonar-config>-->

1 个答案:

答案 0 :(得分:0)

SonarQube有Parsing ErrorRSPEC-2260)的通用规则,但显然XML插件没有实现它。

坦率地说,拥有一个损坏的XML文件非常糟糕,如果是这样的话,你甚至不应该进行SonarQube分析。为什么?因为即使Parsing Error规则可用于XML,它也会搞砸你的指标和相关历史记录(XML文件有 x 问题,然后所有突然只有一个,因为它不能解析,然后 x 一旦修复它再次发出)。

Fail-fast:在此之前,请使用xmllint验证您的XML文件(请参阅this question)。如果有一个腐败的,那就没有什么意义了。