关键字:org.xml.sax.SAXParseException: cvc-complex-type.2.4.d: Invalid content was found starting with element 'class'. No
child element is expected at this point.
这段时间做的一个项目,部署环境是GlassFish,但始终部署失败,但在tomcat下一切正常。错误如下:
Caused by: org.xml.sax.SAXParseException: cvc-complex-type.2.4.d: Invalid content was found starting with element 'class'. No child element is
expected at this point.
at com.sun.enterprise.deployment.io.DeploymentDescriptorFile.read(DeploymentDescriptorFile.java:304)
at com.sun.enterprise.deployment.archivist.ExtensionsArchivist.open(ExtensionsArchivist.java:115)
at com.sun.enterprise.deployment.archivist.PersistenceArchivist.readPersistenceDeploymentDescriptor(PersistenceArchivist.java:125)
at com.sun.enterprise.deployment.archivist.WarPersistenceArchivist.open(WarPersistenceArchivist.java:88)
at com.sun.enterprise.deployment.archivist.Archivist.readRestDeploymentDescriptors(Archivist.java:383)
at com.sun.enterprise.deployment.archivist.Archivist.readDeploymentDescriptors(Archivist.java:373)
at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:238)
at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:247)
at com.sun.enterprise.deployment.archivist.Archivist.open(Archivist.java:208)
at com.sun.enterprise.deployment.archivist.ApplicationFactory.openArchive(ApplicationFactory.java:161)
at org.glassfish.javaee.core.deployment.DolProvider.load(DolProvider.java:162)
... 31 more
引起的原因是在persistence.xml文件中:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="MyProject" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.generate_statistics" value="true"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.provider_configuration_file_resource_path" value="ehcache/ehcache-hibernate-local.xml"/>
<property name="hibernate.jdbc.fetch_size" value="50"/>
<property name="hibernate.jdbc.batch_size" value="30"/>
</properties>
<!--报错说此行无效-->
<class>org.workin.trace.domain.BehaviorPerformance</class>
</persistence-unit>
</persistence>
这样配置的原因是项目中有部分实体类是放在Jar包中的,需要显示配置才能扫描得到。在网上找了N久,始终未能解决。 昨天将
eclipse工作区下的.metadata文件夹删掉,重新建立一个工作区,发现该项目persistence.xml文件中<class>com.xxx</class>这一行报错。起初还以为是XSD引用错误,但是比对了一下,这个和官网上的一模一样。
在多次失败之后,我将<class>...</class> 放到<properties>...</properties>之前定义,发现eclipse验证居然通过了。再将其发布到GlassFish下,问题不再出现。
更改之后的代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="MyProject" transaction-type="RESOURCE_LOCAL">
<class>org.workin.trace.domain.BehaviorPerformance</class>
<properties>
<property name="hibernate.cache.provider_class" value="org.hibernate.cache.EhCacheProvider"/>
<property name="hibernate.cache.use_query_cache" value="true"/>
<property name="hibernate.generate_statistics" value="true"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.provider_configuration_file_resource_path" value="ehcache/ehcache-hibernate-local.xml"/>
<property name="hibernate.jdbc.fetch_size" value="50"/>
<property name="hibernate.jdbc.batch_size" value="30"/>
</properties>
</persistence-unit>
</persistence>
错误发生原因: W3C XML架构xsd规范中<xsd:sequence>要求组中的元素以指定的顺序出现在包含元素中,Glassfish在部署时会根据xsd对文件进行验证。而Tomcat中未出现类似问题,原因可能是GlassFish的验证比Tomcat更加严谨。
总结: 在用Eclipse开发时,validation这一项尽量不要禁用,虽然开启它会使得Eclipse速度很慢,但是却能及时提醒你错误信息。
分享到:
相关推荐
JPA 反向工程 Hibernate反向
产生原因:因为使用 jpa 自动创建表的时候,采用的是TreeMap的,我们要变成LinkedHashMap ...解决方案:在项目下java文件夹下创建包名为: org.hibernate.cfg ,创建类: PropertyContainer [包名,类名一定要相同哦]
基于GlassfishV4,采用JPA、EJB3、Spring4技术进行整合,显示层采用Servlet调用EJB
JPA Entity framework, inside of a Glassfish container
JPA教程JPA教程JPA教程JPA教程JPA教程
OpenJPA 中使用实体标识缓存机制解决这个问题。默认情况下,当应用程序第一次获取实体标识时,OpenJPA 框架从数据库中一次性获取 50 个连续的实体标识缓存起来,当下一次应用程序需要获取实体标识时,OpenJPA 将首先...
jpa jpa规范 jpa源码 jpa jpa规范 jpa源码
NULL 博文链接:https://lspgdut.iteye.com/blog/1512721
jpajpajpajpajpajpajpajpajpajpajpajpajpa
JPAJSFGlassFish03NetBeans 使用GlassFish的JPA,JSF和Arquillian演示的NetBeans版本 演示JPA和Arquillian用法的示例代码 ... 与解决编码问题一样,我花费了很多时间来解决Eclipse问题。 今年,我切换到
包括TOPLink JPA,Hibernate JPA,Open Jpa,jpa批注
eclipse3.6创建EJB+JPA+EAR(每个都是单独工程)完整介绍:自动创建表结构、数据源配置、jpa和ejb工程添加到ear包中。以及注入Emanager。 要这么高的分只是为了物有所值。
JPA
JPA视频_PPT及源码 · 1. JPA视频_概述 · 2. JPA视频_HelloWorld · 3. JPA视频_基本注解 · 4. JPA视频_Transient注解 · 5. JPA视频_Temporal注解 · 6. JPA视频_Table主键生成策略 · 7. JPA视频_...
一个简单的jpademo,可以简单的学习一下,超入门级
jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联映射jpa 关联...
Glassfish 3.1.2.2 JPA問題整理 EclipseLink 如何更新1
此压缩包为一个eclipse上的jpa工程,其中包含了对MySql数据库的增删该,及分页查询。本工程只在main方法运行,没有页面展示
Hibernate、iBATIS、TopLink、Castor JDO、Apache OJB等这么多持久层框架,你还在为学习上面那个框架而苦恼吗?你还为研究下一代是那个而头疼吗? 朋友,学习JPA吧!JPA的出现就是解决您上面的苦恼的。