Длинное сообщение об ошибке, предшествующее трассировке стека (переформатировано для ясности), объясняет проблему:
java.io.IOException: org.xml.sax.SAXParseException
publicId:
file:/home/vladimir/Downloads/glassfish-5.0/glassfish5/glassfish/lib/schemas/web-app_4_0.xsd;
lineNumber: 8; columnNumber: 27;
Deployment descriptor file in archive [web_war_exploded].
TargetNamespace.1:
Expecting namespace
'http://java.sun.com/xml/ns/javaee'
, but the target namespace of the schema document is
'http://xmlns.jcp.org/xml/ns/javaee'.
Таким образом, существует несоответствие между пространством имен, указанным в определении схемы Glassfish ( web-app_4_0. xsd ) и тот, который вы указали в дескрипторе развертывания ( WEB-INF / web.xml ) для своего приложения.
Это содержимое верхнего уровня Glassfishweb-app_4_0.xsd :
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:javaee="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
version="4.0">
...
</xsd:schema>
Обратите внимание, что значение, указанное для targetNamespace
и xmlns:javaee
, равно "http://xmlns.jcp.org/xml/ns/javaee"
, поэтомузначение, которое вы должны указать в web.xml вашего приложения вместо "http://java.sun.com/xml/ns/javaee"
. Чтобы исправить:
Я предполагаю, что ваша проблема возникла из-зау вас есть существующее приложение, которое вы переносите для использования EE 8. Oracle имеет полезную статью об определениях схем для различных версий EE под названием Java EE: XML-схемы для дескрипторов развертывания Java EE , и в нем указано, чтодля EE 8:
Все новые схемы находятся в пространстве имен http://xmlns.jcp.org/xml/ns/javaee/. Большинство старых схем остаются в пространстве имен http://java.sun.com/xml/ns/javaee/.