我尝试在liferay 6.1.1上部署我的应用程序并得到此错误(当我在6.0.6上测试此应用程序时一切正常)。这意味着什么?
引起:com.liferay.portal.kernel.xml.DocumentException:错误 文档的第1行:XML中“version”之后的值 声明必须是带引号的字符串。嵌套异常:值 XML声明中的“version”必须是带引号的字符串。
up:我不知道哪个文件出现此错误。 完整日志
我不知道哪个文件出现此错误... 全部记录 [#| 2012-08-09T15:12:20.322 + 0400 | INFO | glassfish3.1.2 | javax.enterprise.system.std.com.sun.enterprise.server.logging | _ThreadID = 17; _ThreadName =螺纹-3; | 15:12:20,321 ERROR [com.liferay.portal.kernel.deploy.auto.AutoDeployScanner] [AutoDeployDir:210] com.liferay.portal.kernel.deploy.auto.AutoDeployException:com.liferay.portal.kernel.xml。 DocumentException:文档第1行出错:XML声明中“version”后面的值必须是带引号的字符串。嵌套异常:XML声明中“version”后面的值必须是带引号的字符串。 com.liferay.portal.kernel.deploy.auto.AutoDeployException:com.liferay.portal.kernel.xml.DocumentException:文档第1行出错:XML声明中“version”后面的值必须是带引号的字符串。嵌套异常:XML声明中“version”后面的值必须是带引号的字符串。 at com.liferay.portal.tools.deploy.BaseDeployer.autoDeploy(BaseDeployer.java:201) at com.liferay.portal.deploy.auto.PortletAutoDeployListener.deploy(PortletAutoDeployListener.java:84) 在com.liferay.portal.kernel.deploy.auto.AutoDeployDir.processFile(AutoDeployDir.java:193) at com.liferay.portal.kernel.deploy.auto.AutoDeployDir.scanDirectory(AutoDeployDir.java:235) 在com.liferay.portal.kernel.deploy.auto.AutoDeployScanner.run(AutoDeployScanner.java:54) 引起:com.liferay.portal.kernel.xml.DocumentException:文档第1行出错:XML声明中“version”后面的值必须是带引号的字符串。嵌套异常:XML声明中“version”后面的值必须是带引号的字符串。 at com.liferay.portal.xml.SAXReaderImpl.read(SAXReaderImpl.java:399) at com.liferay.portal.xml.SAXReaderImpl.read(SAXReaderImpl.java:378) at com.liferay.portal.xml.SAXReaderImpl.read(SAXReaderImpl.java:409) 在com.liferay.portal.kernel.xml.SAXReaderUtil.read(SAXReaderUtil.java:155) 在com.liferay.portal.tools.WebXMLBuilder.organizeWebXML(WebXMLBuilder.java:60) 在com.liferay.portal.tools.deploy.BaseDeployer.updateWebXml(BaseDeployer.java:2078) 在com.liferay.portal.tools.deploy.BaseDeployer.deployDirectory(BaseDeployer.java:576) 在com.liferay.portal.tools.deploy.BaseDeployer.deployFile(BaseDeployer.java:957) 在com.liferay.portal.tools.deploy.BaseDeployer.deployFile(BaseDeployer.java:889) 在com.liferay.portal.tools.deploy.BaseDeployer.autoDeploy(BaseDeployer.java:198) ......还有4个 引起:org.dom4j.DocumentException:文档第1行出错:XML声明中“version”后面的值必须是带引号的字符串。嵌套异常:XML声明中“version”后面的值必须是带引号的字符串。 在org.dom4j.io.SAXReader.read(SAXReader.java:482) 在org.dom4j.io.SAXReader.read(SAXReader.java:365) at com.liferay.portal.xml.SAXReaderImpl.read(SAXReaderImpl.java:396) ......还有13个 |#]
答案 0 :(得分:8)
问题可能在于您的web.xml文件。我有一个类似的问题,一个portlet在6.1GA1下工作正常但不是6.1GA2。当Liferay部署portlet(和钩子等)时,它会重写文件和其他文件以添加过滤器,库等。因此错误可能不是您最初创建它时的文件,而是Liferay生成的文件。
就我而言,Liferay从
更改了web.xml的第一部分<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
类似
<?xml version=<filters>[other stuff]</filters>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
因此,修改第一行导致了问题。我使用<!-- -->
注释了一些XML并删除了这些部分修复了问题。但这是一个错误恕我直言。
答案 1 :(得分:1)
注意web.xml中的“display-name”标签。 有时(这是我的情况)Eclipse插件使用“j2ee:display-name”标签创建web.xml。 部署程序尝试在“/ display-name”标记位置后附加过滤器块配置。 当存在“j2ee:display-name”时,deployer将过滤器块配置附加到文件中的错误位置,例如“version”属性。 用“display-name”标签替换“j2ee:display-name”标签可以解决问题。
答案 2 :(得分:0)
如果您知道哪个插件(钩子,主题,portlet等)导致错误,那么您将不得不检查该文件夹结构中的所有XML文件并检查第一行并确保它是:< / p>
<?xml version="1.0"?>
这将是一项乏味的任务,但你可以做的事情不是很多!
如果您不知道哪个插件导致了错误,请逐个部署它们,直到找到它为止!
希望这有帮助!