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

JAX-RS带球衣

禄和宜
2023-03-14

我需要在java上开发简单的web服务。我是java技术新手,根据几篇文章,我决定将JAX-RS(Jersey)与嵌入式http服务器(Grizzly2)结合使用,因为它看起来适合构建REST服务,部署似乎很简单。

在我的开发环境中,所有工作都很完美(使用IntllijIdea)。

但当我尝试在测试服务器上部署时,每个请求都返回“500内部错误”(偶数/application.wadl)

简单资源

@Path("resource")
public class SpeechRecognition {
    @GET
    public Response test() {
        Logger.getGlobal().log(Level.INFO, "resource test");
        return Response.ok("success", MediaType.TEXT_PLAIN).build();
    }
}

简单资源配置

public class SimpleApiServer extends ResourceConfig {
    public SimpleApiServer() {
        register(MultiPartFeature.class);
        register(LoggingFilter.class);
        register(JacksonFeature.class);

        property(ServerProperties.TRACING, "ALL");
        property(ServerProperties.TRACING_THRESHOLD, "VERBOSE");

        packages("com.mydomain");
    }
}

简单的应用程序启动

public static void main(String[] args) throws IOException {
    final HttpServer server = GrizzlyHttpServerFactory.createHttpServer("http://0.0.0.0:80", new SimpleApiServer());

    System.out.println(String.format("Jersey app started with WADL available at "
            + "%sapplication.wadl\nHit enter to stop it...", serverUri.toString()));
    System.in.read();
    server.stop();
}

异常映射

@Provider
public class AppExceptionMapper implements ExceptionMapper<Throwable> {
    @Override
    public Response toResponse(Throwable ex) {
        Logger.getGlobal().log(Level.WARNING, "exception response");

        ex.printStackTrace();

        return Response.status(500).entity(Exceptions.getStackTraceAsString(ex)).type("text/plain")
            .build();
    }
}

对于控制台中看到的每个请求

在postman中,我收到“500 Request Failed”,标题中没有来自Jersey的跟踪(尽管我指定了属性(ServerProperties.TRACING,“ALL”);)

服务器控制台中未打印有关任何异常的信息。

我有一个想法,当泽西试图把回应传递给灰熊时,会发生一些不好的事情。

有人想过我应该去哪里解决这个问题吗?我真的坚持了下来。

我真的不想将所有内容(不是这个简单的病态示例,而是更多)重写为传统的面向java servlet的代码(因为这是另一种需要学习的技术)

测试服务器-是azure linux VM上的docker容器。nginx将请求代理到公开的docker端口。使用相同的方案在Rails上获取网站,效果很好。

当grizzly打印关于请求的信息时,它会打印错误的主机名。一、 e.实际主机名为test。应用程序编程接口。mydomain。com和grizzly写入GEThttp://test.api:80/resource

共有1个答案

刘承运
2023-03-14

好的
这是因为Jersey版本在开发和测试环境中不匹配。

远程调试(使用IntellijIdea)显示,在形成响应的过程中

Exception: AbstractMethodError: javax.ws.rs.core.Response.getStatusInfo()Ljavax/ws/rs/core/Response$StatusType;


修复依赖关系后,一切正常。

 类似资料:
  • 我在WAS 8.0上部署了一个JAX-RS WS应用程序,其中包含一个空的2.4web.xml,这个类扩展了'javax.WS.rs.core.application'和2个资源,它工作得很好。 如何在WAS7.0上部署JAX-RS应用程序而不使用Jersey或任何其他与应用程序服务器相关的类? 谢谢

  • 问题内容: 我真的很困惑。我已经尝试过使用tomcat的Jax-rs并使用所有能够使用调用我的服务的注释。因此,没有Jax- rs,我可以简单地拥有一个servlet并调用我的服务。同样,正如我尝试过的那样,有jax-rs和jersey(我研究了的实现)以及web.xml中的以下内容。 然后,我在GET上具有与JAX-RS相同的注释,可以使用正确的URL调用我的服务。 我的问题是,为什么球衣使用s

  • 我有一个服务器Weblogic 12.1.3,带有JAX-RS 2。x作为共享库安装(参见。https://docs.oracle.com/middleware/1213/wls/RESTF/use-jersey20-ri.htm#RESTF297). 该共享库包括例如javax。ws。rs-api-2.0。jar和jersey-media-multipart-2.5.1。jar。 请注意,我不确

  • 我想在Grizzly 2上运行JAX-RS 2.0/jer,但我现在不知道如何设置它。我发现了以下Maven依赖项: 我需要什么Java代码才能在灰熊上运行泽西岛?

  • JAX-RS (JSR 311) 是一个社区驱动的标准用于使用 Java 构建 RESTful Web 服务。

  • 但是附件总是空的。有什么建议吗?提前谢了。