如何解决jsr311-api和jersey-core之间冲突的Path.class?

时间:2017-09-09 21:39:00

标签: java rest tomcat jersey

我正在使用jersey-core:1.8和jrs311:0.8。两个依赖项都是必需的。在运行单元测试IntellJ时,有时我会得到以下异常。排列依赖项的顺序会停止异常,但是在Tomcat 7.0.2中启动时,始终会出现异常。重新排列库不能解决问题。

进一步深入研究,我找到了班级" javax.ws.rs.Path"是两个依赖。它已被包括但不是依赖。 jrs311中的一个包含一个名为 limited()的额外方法。类 URITemplate 似乎总是在 jersey-core lib中找到Path.class,因此是异常。

我尝试过切换到不同版本的库但不成功。由于我正在使用这两个库的代码。

任何人对如何解决此类问题都有任何想法?

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: Factory method [public org.apache.cxf.jaxrs.JAXRSServerFactoryBean com.emailvision.nsapi.conf.NsApiSpringConf.restServerFactory(com.emailvision.nsapi.service.impl.NotificationServiceREST)] threw exception; nested exception is java.lang.NoSuchMethodError: javax.ws.rs.Path.limited()Z
 * at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:181)
 * at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:592)
 * ... 27 more
 * Caused by: java.lang.NoSuchMethodError: javax.ws.rs.Path.limited()Z
 * at org.apache.cxf.jaxrs.model.URITemplate.createTemplate(URITemplate.java:167)
 * at org.apache.cxf.jaxrs.JAXRSServiceFactoryBean.createClassResourceInfo(JAXRSServiceFactoryBean.java:198)
 * at org.apache.cxf.jaxrs.JAXRSServiceFactoryBean.setResourceClassesFromBeans(JAXRSServiceFactoryBean.java:139)
 * at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.setServiceBeans(JAXRSServerFactoryBean.java:272)

1 个答案:

答案 0 :(得分:0)

我能够找到一种以可预测的方式运作的解决方案。我所做的是从包含javax.ws.rs.Path方法的jrs311:0.8依赖项下载limited()的源代码。然后我作为项目的一部分添加到我的src中。由于我的项目的SRC具有比任何依赖项更高的优先级,因此Java总是选择此类。

我自己不喜欢这个解决方案。我不得不写一篇大报告来判断我对老板的行为。考虑更多,那些包装jrs311:0.8 jar的人一定有同样的问题,为什么你要包含一个你自己没有编写的开源java代码。