ServletPath从RESTEasy 3.0.10.Final更改为3.0.23.Final

时间:2017-06-05 15:58:18

标签: wildfly resteasy wildfly-8

我已使用新版本的RESTEasy升级了我的Wildfly 8.2.1.Final,以便能够使用SNI支持(3.0.10.Final版本不提供)。所以我在我的 / wildfly / modules / system / layers / base 目录中复制了resteasy-jboss-modules-3.0.23.Final内容。但现在我有不同的行为!我的休息服务没有被调用。当我检查上下文/ servlet路径时,我在3.0.10.Final和3.0.23.Final版本之间找到了不同的值:

使用RESTEasy 3.0.10.Final 我有以下值:

        String contextPath = request.getContextPath(); // = "/myApp"
        String servletPath = request.getServletPath(); // = "/api"
        String pathInfo = request.getPathInfo(); // = "/auth"

使用RESTEasy 3.0.23.Final 我有:

        String contextPath = request.getContextPath(); // = "/myApp"
        String servletPath = request.getServletPath(); // = "/api/auth"
        String pathInfo = request.getPathInfo(); // = null

我的jboss-web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
    <context-root>/myApp</context-root>
</jboss-web>

我的web.xml中没有servlet映射。我所拥有的是使用 @ApplicationPath 注释扩展 javax.ws.rs.core.Application 的类:

@ApplicationPath("/api")
public class RESTActivator extends Application {
    private final Set<Class<?>> classes;

    public RESTActivator() {
        HashSet<Class<?>> c = new HashSet<>();
        c.add(ARestService.class);
        c.add(AnotherRestService.class);
        classes = Collections.unmodifiableSet(c);
    }

    @Override
    public Set<Class<?>> getClasses() {
        return classes;
    }
}

1 个答案:

答案 0 :(得分:1)

规范未定义JAX-RS上下文中request.getServletPath()request.getPathInfo()的行为,因此我猜一个实现可以自由地管理它们认为合适的方式。

如果这些路径组件对您很重要,请考虑使用javax.ws.rs.core.UriInfo通过@javax.ws.rs.core.Context注入的服务。