我有
@ApplicationPath("/resourcesP") public class RestfulPrediction extends Application { @Override public Set> getClasses() { Set > set = new HashSet >(); set.add(PredictionsRS.class); return set; } }
和
@ApplicationPath("/resourcesA") public class RestfulAdage extends Application { @Override public Set> getClasses() { Set > set = new HashSet >(); set.add(Adages.class); return set; } }
两个不同的ApplicationPath和类如下.
@Path("/") public class service.Adages {} @Path("/") public class webservices.PredictionsRS {}
它们都在不同的ApplicationPath中声明.我正在使用Jersey,web.xml中的配置看起来像
jersey com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages service webservices 1
而且我得到了
严重:冲突的URI模板.URI模板/用于根资源类service.Adages和URI模板/转换为相同的正则表达式(/.*)?
为什么我有两个不同的ApplicationPath这个例外是在启动时出现的?
如果我在param-value中取出一个包有效,那么如果我更改了其中一个@Path注释,那么这对我的配置有问题吗?
我正在使用Jersey 1.10.谢谢大家.
你没有在你的JAX-RS中定义你的JAX-RS应用程序web.xml
.请尝试以下方法:
full.name.RestfulAdage full.name.RestfulPrediction full.name.RestfulPrediction /resourcesP/* full.name.RestfulPrediction /resourcesA/*
并@ApplicationPAth
从代码中删除注释.
我用Jersey 2.7,servlet容器3.0检查了上面的代码,它可以工作.如果还有这个bug,请尝试升级到Jersey 1.17(不应该改变Jersey 1.10的任何行为,而是修改bug)并最终使用servlet容器3.0.
UPDATE
检查可能性后,以下配置与Jersey 1.17一起使用
jersey com.sun.jersey.spi.container.servlet.ServletContainer com.sun.jersey.config.property.packages com.koitoer.webservices 1
似乎旧版Jersey中的规范中存在错误,这种错误会将引用圈回并标记为重复的端点.使用上面的配置加载两个端点没有任何问题.
8/04/2014 09:13:40 PM com.sun.jersey.server.impl.container.servlet.JerseyServletContainerInitializer addServletWithApplication INFO:注册名为com.koitoer.webservices.chapter2.service2.RestfulPrediction的Jersey servlet应用程序servlet映射,/ resourcesP/*,与同名的Application类
8/04/2014 09:13:40 PM com.sun.jersey.server.impl.container.servlet.JerseyServletContainerInitializer addServletWithApplication INFO:在servlet映射中注册名为com.koitoer.webservices.chapter2.RestfulAdage的Jersey servlet应用程序,/ resourcesA/*,与同名的Application类