I have
@ApplicationPath("/resourcesP")
public class RestfulPrediction extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> set = new HashSet<Class<?>>();
set.add(PredictionsRS.class);
return set;
}
}
And
@ApplicationPath("/resourcesA")
public class RestfulAdage extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> set = new HashSet<Class<?>>();
set.add(Adages.class);
return set;
}
}
两个不同的ApplicationPath和类如下。
@Path("/")
public class service.Adages {}
@Path("/")
public class webservices.PredictionsRS {}
它们都在不同的 ApplicationPath 中声明。我正在使用 Jersey,web.xml 中的配置如下所示
<servlet>
<servlet-name>jersey</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>
service
webservices
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
我越来越
严重:URI 模板冲突。 root 的 URI 模板 /
资源类 service.Adages 和 URI 模板/转换为
相同的正则表达式(/.*)?
为什么如果我有两个不同的 ApplicationPath,那么在启动时会出现此异常?
如果我在 param-value 中取出一个包,这可以工作,如果我更改其中一个 @Path 注释,这也可以工作,所以这是我的配置有问题吗?
我正在使用泽西岛 1.10。谢谢大家。
您没有在您的文件中定义您的 JAX-RS 应用程序web.xml
。请尝试以下操作:
<servlet>
<servlet-name>full.name.RestfulAdage</servlet-name>
</servlet>
<servlet>
<servlet-name>full.name.RestfulPrediction</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>full.name.RestfulPrediction</servlet-name>
<url-pattern>/resourcesP/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>full.name.RestfulPrediction</servlet-name>
<url-pattern>/resourcesA/*</url-pattern>
</servlet-mapping>
并删除@ApplicationPAth
来自代码的注释。
我用 Jersey 2.7、servlet 容器 3.0 检查了上面的代码,它可以工作。如果仍然存在该错误,请尝试升级到 Jersey 1.17(这不会改变 Jersey 1.10 的任何行为,而是修复错误)并最终使用 servlet 容器 3.0。
UPDATE
检查可能性后,以下配置适用于 Jersey 1.17
<servlet>
<servlet-name>jersey</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>
com.koitoer.webservices
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
旧版本 Jersey 的规范中似乎存在错误,该错误会回绕引用并将其标记为重复端点。使用上面的配置可以毫无问题地加载两个端点。
2014/8/04 09:13:40 下午
com.sun.jersey.server.impl.container.servlet.JerseyServletContainerInitializer
addServletWithApplication INFO:注册 Jersey servlet
应用程序,名为 com.koitoer.webservices.chapter2.service2.RestfulPrediction,位于
Servlet 映射,/资源P/*,与Application类相同
姓名
8/04/2014 09:13:40 PM com.sun.jersey.server.impl.container.servlet.JerseyServletContainerInitializer
addServletWithApplication INFO:注册 Jersey servlet
应用程序,名为 com.koitoer.webservices.chapter2.RestfulAdage,位于
Servlet 映射,/资源/*,与应用程序类
一样的名字
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)