使用web.xml配置Glassfish 4的JX-RS会导致错误

时间:2014-04-27 05:09:48

标签: java glassfish jersey web.xml glassfish-4

我正在尝试使用JX-RS创建Java EE应用程序。我使用以下配置工作:

@ApplicationPath("rs")
public class MyApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        final Set<Class<?>> classes = new HashSet<>();
        // register root resource
        classes.add(ProbeREST.class);
        return classes;
    }
}

但是,我更喜欢使用web.xml进行配置。我认为与简单的xml配置相比,上面的内容非常难看,如下所示:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <servlet-mapping>
        <servlet-name>javax.ws.rs.core.Application</servlet-name>
        <url-pattern>/rs/*</url-pattern>
    </servlet-mapping>
</web-app>

不幸的是,当我尝试部署应用程序时,收到错误:

Exception while deploying the app [my_app] : There is no web component by the name of javax.ws.rs.core.Application here.

如何防止此错误?

2 个答案:

答案 0 :(得分:5)

如JAX-RS 2.0, 2.3.2 Servlet 一章所述,您确实错过了web.xml中的 servlet 条目:

<?xml version="1.0" encoding="UTF-8"?>
   <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
        <servlet>
            <servlet-name>javax.ws.rs.core.Application</servlet-name>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>javax.ws.rs.core.Application</servlet-name>
            <url-pattern>/rs/*</url-pattern>
        </servlet-mapping>
    </web-app>

答案 1 :(得分:1)

servlet-mapping中的web.xml是问题所在,只需将其删除即可。它不需要,因为您正在部署到Servlet 3兼容容器,该容器支持自动应用程序注册而不web.xml

如果web.xml看起来像这样就足够了:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
</web-app>

另见: