我得到异常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;
}
}
我添加了此代码..仍然无效
答案 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,并且仍然可以严格控制要使用自定义逻辑发布的资源列表。你确定这是你的需要吗?如果是这种情况,您应跳过上述配置。
无论如何,请选择三种方法之一