XML Parsing Error: no element found Location: http://localhost:8081/web-app/pages/login.xhtml Line Number 1, Column 1: ^

XML Parsing Error: no element found Location: http://localhost:8081/web-app/pages/login.xhtml Line Number 1, Column 1: ^

我的 login.xhtml 开头为:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

我正在使用 Java8、JSF、Primefaces、Maven、Tomcat8。 我认为我的配置有问题,例如servlet 和 web.xml.

XML Parsing Error: no element found Location: [...] Line Number 1, Column 1

到目前为止,这个确切的错误意味着网络浏览器在被指示将响应解释为 XML 时检索到一个完全空的响应,通常是通过 Content-Type header例如 application/xhtml+xmlapplication/xml,或者如果不存在,则通过 URL 中的文件扩展名,例如 .xhtml.xml.

鉴于在请求 JSF 登录页面时会发生这种情况,这强烈表明它包含 syntax/runtime 错误,并且 Web 应用程序没有正确配置错误处理。显然,错误页面本身也被 login/security 约束所阻止,导致服务器无法呈现包含所有异常详细信息的 "normal" 错误页面,因此 return 一个完全空的响应。

你最好的办法是阅读服务器日志以了解实际异常 and/or 运行 调试器 and/or 创建一个 JSF exception handler 明确记录异常到服务器日志(只是以防万一您找不到异常,因此它们似乎被吞没了)。一旦掌握了实际的异常,通常是使用异常类型+消息+第一行作为关键字在互联网上查找线索。

XML 解析错误:未找到根元素

当您的客户端发送如下请求时发生错误:

curl -X GET --header 'Accept: application/json' 'http://192.168.1.249:9001/students/

你可以在 header 中看到 'Accept: application/json' 这意味着客户端只接受 JSON 格式的服务器响应。

但是服务器生成 XML 内容类型的响应类型,它会尝试将 XML 解析为 JSON。在此阶段异常触发。

解决方案:

请将回复内容类型改为application/json或 将请求 header 更改为 'Accept: application/xml'.

谢谢。