我需要在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
好的
这是因为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 服务。
但是附件总是空的。有什么建议吗?提前谢了。