在 resteasy 和 EJB 3.0 中不能转换为 javax.ws.rs.core.Application
cannot be cast to javax.ws.rs.core.Application in resteasy and EJB 3.0
我遇到异常 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;
}
}
我已经添加了这段代码..仍然无法正常工作
如果您的 class com.sai.peps.ejb.frequentexceeding.FrequentExceedingBean
应该是配置的应用程序 class,它必须扩展 javax.ws.rs.core.Application
因为 servlet 容器将实例化此 class 然后将 ist 转换为 javax.ws.rs.core.Application
以便能够调用它的 getClasses()
和 getSingletons()
方法。
更新
唉JBoss 5.1 还没有Servlet 3.0.,所以如果没有web.xml.
就不能配置它
请检查 web.xml 文件中所需条目的已接受答案 of this question。 class 名称的配置与您的配置不同。我自己也好久没用web.xml配置了,所以不太坚定
你的 web.xml 看起来有点乱。
问题是:为什么要为应用程序提供自己的实现 class?
如果你有
resteasy.scan = true
您不需要任何其他东西(除了在您的资源和供应商上适当注释 classes 来发布您的资源)。
如果你有
resteasy.resources
使用资源列表进行评估
你可以省略 resteasy.scan
参数并明确提供要发布的资源列表(在这种情况下你输入 com.sai.peps.ejb.frequentexceeding.MyRestApplication
但这是错误的,可能你应该输入 com.sai.peps.ejb.frequentexceeding.FrequentExceedingBean
)
您可以覆盖应用程序 class 以将配置移出 web.xml,并且仍然严格控制要使用自定义逻辑发布的资源列表。你确定这是你的需要吗?如果是这种情况,您应该跳过上述配置。
无论如何选择三种方法中的一种
我遇到异常 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;
}
}
我已经添加了这段代码..仍然无法正常工作
如果您的 class com.sai.peps.ejb.frequentexceeding.FrequentExceedingBean
应该是配置的应用程序 class,它必须扩展 javax.ws.rs.core.Application
因为 servlet 容器将实例化此 class 然后将 ist 转换为 javax.ws.rs.core.Application
以便能够调用它的 getClasses()
和 getSingletons()
方法。
更新
唉JBoss 5.1 还没有Servlet 3.0.,所以如果没有web.xml.
就不能配置它请检查 web.xml 文件中所需条目的已接受答案 of this question。 class 名称的配置与您的配置不同。我自己也好久没用web.xml配置了,所以不太坚定
你的 web.xml 看起来有点乱。
问题是:为什么要为应用程序提供自己的实现 class?
如果你有
resteasy.scan = true
您不需要任何其他东西(除了在您的资源和供应商上适当注释 classes 来发布您的资源)。
如果你有
resteasy.resources
使用资源列表进行评估
你可以省略 resteasy.scan
参数并明确提供要发布的资源列表(在这种情况下你输入 com.sai.peps.ejb.frequentexceeding.MyRestApplication
但这是错误的,可能你应该输入 com.sai.peps.ejb.frequentexceeding.FrequentExceedingBean
)
您可以覆盖应用程序 class 以将配置移出 web.xml,并且仍然严格控制要使用自定义逻辑发布的资源列表。你确定这是你的需要吗?如果是这种情况,您应该跳过上述配置。
无论如何选择三种方法中的一种