使用泽西moxy时
<!-- Jersey moxy -->
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-moxy</artifactId>
<version>1.18.3</version>
<scope>provided</scope>
</dependency>
与eclipse链接2.6.0-M3一起
<!-- Eclipse Link persistence -->
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<!-- <version>2.4.2-RC1</version> -->
<!-- <version>2.5.1-RC3</version> -->
<!-- <version>2.5.1</version> -->
<!-- <version>2.5.2-M1</version> -->
<!-- <version>2.5.2</version> -->
<version>2.6.0-M3</version>
<exclusions>
<exclusion>
<artifactId>commonj.sdo</artifactId>
<groupId>commonj.sdo</groupId>
</exclusion>
</exclusions>
</dependency>
我得到了
java.lang.NoClassDefFoundError: javax/validation/ConstraintViolationException
at org.eclipse.persistence.jaxb.JAXBMarshaller.<init>(JAXBMarshaller.java:102)
at org.eclipse.persistence.jaxb.JAXBContext$JAXBContextState.createMarshaller(JAXBContext.java:1527)
at org.eclipse.persistence.jaxb.JAXBContext.createMarshaller(JAXBContext.java:385)
at org.eclipse.persistence.jaxb.JAXBContext.createMarshaller(JAXBContext.java:1)
我试图通过改变我的pom.xml中的顺序来解决这个问题 适用于我的一些项目。在嵌套环境中,某些项目依赖于另一个项目,问题再次出现。
http://dev.eclipse.org/mhonarc/lists/eclipselink-users/msg08372.html 建议依赖可能会丢失,所以我补充说:
<!--
http://dev.eclipse.org/mhonarc/lists/eclipselink-users/msg08372.html
http://mvnrepository.com/artifact/javax.validation/validation-api/1.1.0.Final
-->
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>1.1.0.Final</version>
</dependency>
eclipselink依赖项出现的位置。这似乎也有帮助。
这真的是个错误吗?什么是解决这个问题的“正确”方法?
不幸的是,我没有选择将Jersey升级到2.x,因为有太多的不兼容性和(我听到)错误。
答案 0 :(得分:2)
解决此问题的正确方法是添加javax.validation:validation-api依赖项。
Bean验证是EclipseLink 2.6.0中的新功能,如Design Doc https://bugs.eclipse.org/bugs/attachment.cgi?id=241506
中所述结果是,现在需要依赖。
我已经针对EclipseLink提交了新的增强请求,以使此依赖项可选。