什么是org.xml.sax.SAXException:扫描程序状态24无法识别?

时间:2017-11-07 23:42:00

标签: java xml exception sax

我收到以下异常但无法找到特定于此异常的任何文档:

<head>
  <meta charset="UTF-8">
  <title>Example - example-ng-click-production</title>


  <script src="//code.angularjs.org/snapshot/angular.min.js"></script>
  <script>
    var app = angular.module('app', []);
    app.controller('testController', function() {

      var vm = this;
      vm.test = test;

      function test() {
        alert("test");
      }

    });



  </script>


</head>

<body>
  <div ng-controller="testController as vm">
    <button ng-click="vm.test()">
      Test with controllerAs
    </button>
  </div>

</body>

任何有关正确资源的帮助或指示都会非常有用。

1 个答案:

答案 0 :(得分:0)

此异常由DOM解析期间的Sun版本的Xerces解析器生成。不幸的是,隐藏了引发异常的特定代码块(以下内容从JDK 8.0 DOMParser source code转述):

public void parse(InputSource inputSource) throws SAXException, IOException
{
    try
    {
        XMLInputSource xmlInputSource = new XMLInputSource(inputSource.getPublicId(), inputSource.getSystemId(), null);
        xmlInputSource.setByteStream(inputSource.getByteStream());
        xmlInputSource.setCharacterStream(inputSource.getCharacterStream());
        xmlInputSource.setEncoding(inputSource.getEncoding());
        parse(xmlInputSource); <-- Original XNIException is thrown in here
    } catch (XMLParseException e) {
        ...
    } catch (XNIException e) { // <-- wrap XNI exceptions as SAX exceptions
        Exception ex = e.getException();
        if (ex == null) { throw new SAXException(e.getMessage()); }
        if (ex instanceof SAXException) { throw (SAXException) ex; }
        if (ex instanceof IOException) { throw (IOException) ex; }
        throw new SAXException(ex); // <-- Note: The original stack trace is lost here.
    }
}

由于原始堆栈跟踪被遮挡,实际上只有两种方法可以确定此类解析的实际原因异常:

  1. 将调试器附加到DOMParser.parse()方法并逐步执行代码以查看最初抛出异常的位置。

  2. 从XML文档中删除元素,直到不再出现解析错误,然后以小增量添加它们,以确定哪个元素/属性/处理指令/等触发解析器错误。

  3. 如果您不想找到错误的来源而只是试图让错误消失,您可以尝试使用不同的XML解析器(例如,最新版本的Apache Xerces而不是默认的Sun Xerces解析器) )。

    正如早先的评论者所建议的那样,提供XML文档的副本以及Java的特定版本(例如,JDK 8.0u40b25)可以提供更精确的答案。