【问题标题】:Cannot load jersey resource classes to JBoss 7无法将球衣资源类加载到 JBoss 7
【发布时间】:2013-01-17 05:52:16
【问题描述】:
  • 球衣 - 1.16
  • JBoss - 7.1.2 最终版

使用上述内容,我无法将资源类加载到 JBoss 并且它抱怨以下错误。

ERROR [[/]] Servlet 抛出 load() 异常:javax.servlet.ServletException:资源配置类 biz.bsite.direct.spring.mobile.AddressbookResource,不是类 javax.ws.rs 的超类.core.Application 在 com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:741) 在 com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:678) 在 com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:203) 在 com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374) 在 com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557)

我的资源类如下所示。

@Path("通讯录") 公共类 AddressbookResource {

Web.xml 看起来像:

<servlet>
    <servlet-name>JerseyMobile</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>biz.bsite.direct.spring.mobile.AddressbookResource</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

有人可以帮我解决这个问题吗?尝试使用包扫描,但它也不适用于 JBoss 7。

【问题讨论】:

    标签: xml jersey jboss7.x


    【解决方案1】:

    我相信正确的方法是使用与应用服务器无关的 JAX-RS 部署模型,如 here 所述。您只需要在您的 JAX-RS Web 应用程序中扩展 javax.ws.rs.core.Application。这是一个例子。

    package com.sun.jersey.samples.helloworld.resources;
    
    import java.util.HashSet;
    import java.util.Set;
    import javax.ws.rs.core.Application;
    
    public class MyApplication extends Application {
        @Override
        public Set<Class<?>> getClasses() {
            final Set<Class<?>> classes = new HashSet<Class<?>>();
            classes.add(HelloWorldResource.class);
            return classes;
        }
    }
    

    然后,你需要把它放在你的 web.xml 中。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
        <servlet>
            <servlet-name>com.sun.jersey.samples.helloworld.resources.MyApplication</servlet-name>
            <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
            <init-param>
                <param-name>javax.ws.rs.Application</param-name>
                <param-value>com.sun.jersey.samples.helloworld.resources.MyApplication</param-value>
            </init-param>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <context-param>
            <param-name>resteasy.scan</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>resteasy.scan.providers</param-name>
            <param-value>false</param-value>
        </context-param>
        <context-param>
            <param-name>resteasy.scan.resources</param-name>
            <param-value>false</param-value>
        </context-param>
        <servlet-mapping>
            <servlet-name>com.sun.jersey.samples.helloworld.resources.MyApplication</servlet-name>
            <url-pattern>/*</url-pattern>
        </servlet-mapping>
    </web-app>
    

    除了部署为 JAX-RS 应用程序之外,您还需要禁用 resteasy 扫描您的资源和提供程序。

    我在 Github here 中整理了一个简单的 Jersey JBoss EAR 示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-08
      • 2011-07-12
      • 2010-11-25
      • 1970-01-01
      • 2014-03-13
      相关资源
      最近更新 更多