无法在resteasy和EJB 3.0中强制转换为javax.ws.rs.core.Application

时间:2017-04-26 06:18:53

标签: java web-services java-ee jboss resteasy

我得到异常com.sai.peps.ejb.frequentexceeding.FrequentExceedingBean无法强制转换为无法强制转换为javax.ws.rs.core.Application

我正在使用EJB 3.0和jboss 5.1& resteasy

请告诉我,我的错误在哪里。

  <context-param>
        <param-name>resteasy.scan</param-name>
        <param-value>true</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.resources</param-name>
        <param-value>com.sai.peps.ejb.frequentexceeding.MyRestApplication</param-value>
    </context-param>
    <context-param>
        <param-name>resteasy.servlet.mapping.prefix</param-name>
        <param-value>/rest/</param-value>
    </context-param>

 <servlet>
        <servlet-name>resteasy-servlet</servlet-name>
        <servlet-class>
            org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher
        </servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>com.sai.peps.ejb.frequentexceeding.MyRestApplication</param-value>
        </init-param>
    </servlet>  
  <servlet-mapping>
        <servlet-name>resteasy-servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

编辑:

package com.sai.peps.ejb.frequentexceeding;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/rest")
public class MyRestApplication extends Application {
    private Set<Object> resourceObjects = new HashSet<Object>();
    private Set<Class<?>> resourceClasses = new HashSet<Class<?>>();

    public  MyRestApplication() {
        resourceClasses.add(FrequentExceedingBean.class);
    }
    @Override
    public Set<Class<?>> getClasses() {
        return resourceClasses;
    }
    @Override
    public Set<Object> getSingletons() {
        return resourceObjects;
    }
}

我添加了此代码..仍然无效

2 个答案:

答案 0 :(得分:1)

如果您的类com.sai.peps.ejb.frequentexceeding.FrequentExceedingBean在配置时应该是Aplication类,它必须扩展javax.ws.rs.core.Application,因为servlet容器将实例化此类的对象,然后将ist强制转换为javax.ws.rs.core.Application能够称之为getClasses()getSingletons()方法。

<强>更新

Alas JBoss 5.1还没有Servlet 3.0。所以你不能在没有web.xml的情况下使用它。

请检查已接受的答案of this question以获取web.xml文件中所需的条目。关于类名的位置,配置与您的配置不同。我自己已经很久没有使用web.xml配置了,所以我在那里不那么坚定。

答案 1 :(得分:0)

你的web.xml似乎有点凌乱。

问题是:为什么要提供自己的Application类实现?

如果你有

resteasy.scan = true

您不需要任何其他内容(在您的资源和提供程序类上使用正确的注释来发布您的资源)。

如果你有

resteasy.resources

使用资源列表进行评估

您可以省略resteasy.scan参数并明确提供要发布的资源列表(在这种情况下,您放置com.sai.peps.ejb.frequentexceeding.MyRestApplication并且错误,可能您应该放置com.sai.peps.ejb.frequentexceeding.FrequentExceedingBean)< / p>

您可以覆盖Application类以将配置移出web.xml,并且仍然可以严格控制要使用自定义逻辑发布的资源列表。你确定这是你的需要吗?如果是这种情况,您应跳过上述配置。

无论如何,请选择三种方法之一