xml - 无法将 Jersey 资源类加载到 JBoss 7

标签 xml jersey jboss7.x

  • Jersey - 1.16
  • JBoss - 7.1.2 决赛

有了上面的内容,我无法将资源类加载到 JBoss 并且它提示以下错误。

ERROR [[/]] Servlet threw load() exception: javax.servlet.ServletException: Resource configuration class, biz.bsite.direct.spring.mobile.AddressbookResource, is not a super class of class javax.ws.rs.core.Application at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:741) at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:678) at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:203) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:374) at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:557)

我的资源类如下所示。

@Path("addressbook") public class 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。

最佳答案

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

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 中整理了一个简单的 Jersey JBoss EAR 示例 here .

关于xml - 无法将 Jersey 资源类加载到 JBoss 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372934/

相关文章:

java - GAE Blobstore IllegalStateException : NO CONTENT

java - JBoss 作为 7 : Map Servlet to Context Root ("/") via Code Config

java - Solr 复制泄漏一些内存?

xml - 定义 xml 的相等性

java - 使用 Jersey 防止对象属性内的空值

css - SVG 规范的 XMLNS W3 URL 现在在 Chrome 中抛出错误

java - 使用 Jersey 在 REST 服务中上传多个文件

java - 使用 JBOSS 开发人员工作室部署 Web 服务时,Java8 和 JBoss EAP 7 是否存在严重的兼容性问题

xml - 使用XMLStarlet插入1000多个节点和属性-运行缓慢

xml - 手动换行和格式化文档