当前位置: 首页 > 知识库问答 >
问题:

在类级别使用@path(“/”)的JAX-RS webservice在Tomee+1.5.1上失败

公羊俊
2023-03-14

这个简单的根资源类在Tomee+1.5.1上运行时失败,返回404错误“请求的资源不可用”。它在WEB-INF中打包为WAR with和空web.xml文件。

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;


@Path("/")
@Produces({ "text/plain", "text/html", "text/xml", "application/xml", "application/json" })
public class BrokenResource {
    private static final Log logger = LogFactory.getLog(BrokenResource.class);


    public BrokenResource()
    {
        logger.info("constructed");
    }

    @GET
    @Path("getloggedinguids")
    public Response foo(@Context UriInfo uInfo)
    {
        return Response.ok("\n\n\nrequest URI = " + uInfo.getRequestUri()).build();
    }
}

它进行部署,我在控制台输出中看到以下几行:

Mar 22, 2013 4:56:16 PM org.apache.openejb.server.rest.RESTService deployPojo
INFO: REST Service: http://localhost:8080/test//*  -> Pojo BrokenResource

我还尝试用web.xml将其打包,该web.xml声明

<servlet>
    <servlet-name>test</servlet-name>
    <display-name>Test OpenEJBRest Servlet</display-name>

    <servlet-class>
        org.apache.openejb.server.rest.OpenEJBRestServlet
    </servlet-class>

    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>test</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

结果与空web.xml文件相同。

WARNING: No root resource matching request path /test/getloggedinguids has been found, Relative Path: /getloggedinguids.

共有1个答案

潘翊歌
2023-03-14

请记住,如果您使用JAX-RSTomEE+版本,TomEE不是在web.xml中添加条目,而是本机支持JAX-RS。

添加类似这样的类并删除web.xml条目:

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

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;


@ApplicationPath("/")
public class NoteTakerApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        return new HashSet<Class<?>>(Arrays.asList(BrokenResource.class, RestExceptionMapper.class, OtherClassesYouMayHave.class));
    }
}
 类似资料:
  • 问题陈述: 出于“奇怪”的原因,我们对API的所有操作都有不同的“主机”。我们有这样的API: 操作1:获取https://host1:port1/api/resources 如果我们按原样使用Swagger/OpenAPI,就意味着每个操作创建一个Swagger/OpenAPI规范,从而使每个操作都有一个Swagger ui页面,然后需要重新创建一个索引页面来列出API的所有操作:-/这正是我们

  • 问题内容: 我正在尝试使用异步响应构建REST Web服务。 我已经在网上解决了这个错误,但是,没有一种解决方案对我有用。我不确定如何去做。 这是REST服务的代码,它具有AsyncResponse,并且取自,我将在下面提供该文件中指定的jar文件。问题是,在部署战争时,我遇到一个例外: 我的课如下: 我的Maven文件如下: 问题答案: 是 当应用程序试图调用一个抽象方法抛出 。 是中的抽象方法

  • 如何设置在TomEE中运行的OpenEJB组件的日志记录级别?我想从的源代码中查看调试日志记录语句。 我尝试修改conf/logging.properties并在WAR的WEB-INF\类中添加一个logging.properties文件,但我找不到正确的组合,我甚至不确定这些是要修改/创建的正确文件。

  • 问题内容: 我在课堂上使用哪种方法,我想知道如何在特定的服务方法上使用只读。 我是否需要额外的定义与此服务的方法,或有另一种方式? 问题答案: 从Spring API 这里。 在评估方法的事务设置时,最派生的位置优先。 在下面的示例中,DefaultFooService类在类级别使用只读事务的设置进行注释,但是同一类中updateFoo(Foo)方法上的@Transactional注释优先于定义的

  • 问题内容: 仍然存在任何情况(鉴于Java EE6具有java:global /,app /,模块/命名标准),需要像下面的示例一样声明EJB或Resources? 在使用的助手类中查找PlaceBid 问题答案: 该命名空间是有时有点了解的功能。该名称空间对应于所谓的(ENC)。 这就像与每个组件相关联的私有“哈希图”一样,整个Web模块被视为一个组件,而各个EJB Bean也分别被视为组件。

  • 多年来,我一直试图让托米1.5.2 JAX-RS与杰克逊合作。我想我已经尝试了100种方法。 这是我的最后一次尝试: 我在conf/system.properties中添加了以下内容: 我在托米的 lib 文件夹中添加了: jackson-mapper-asl-1.9.12.jar jackson-core-asl-1.9.12.jar罐 jackson-jaxrs-1.9.12.jar 我在一个