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

使用JAX-RS(RESTEasy)作为中间件:代理客户端对另一服务器的请求

巫马昆琦
2023-03-14

我正在使用JAX-RS(RESTEasy)构建一个服务器,它将为客户端提供REST接口。服务器将充当客户端和另一个服务器之间的代理。另一个服务器是第三方服务器(JasperReports),也有一个REST接口。我想使用JAX-RS让我的代理与该服务器对话。(我的代理服务器添加了身份验证和其他服务。)因此,这里有三方:客户端、代理服务器和报告服务器。

我以这种方式看待工作流程。代理服务器实现 JAX-RS(服务器)以获取客户机的请求,重新打包它们,然后使用 JAX-RS(客户机)将它们传递给报告服务器。当代理服务器获得报告时,我想将其中继回客户端。但是,到目前为止,我相信这就是事情崩溃的地方。

这是一些代码:

// Server gets a request and passes it to its (internal) client, handler.
@GET
@Path("/jobs")
public Response fetchAllScheduledJobs() {
    ReportScheduleHandler handler = new ReportScheduleHandler();
    Response response = handler.fetchAllScheduledJobs();
    return response;
}

下面是处理程序将它发送到报告服务器...

public Response fetchAllScheduledJobs() {
    Client client = ClientBuilder.newClient();

    client.register(getBasicAuthentication());
    Response response = 
        client.target(getReportsBaseUri())
            .request()
            .accept("application/json")
            .get();

    client.close();
    return response;
}

所以,在我(被误导的)想法中,我认为代理服务器只是将响应返回给客户端,一切都很好。但是,正如我上面所说,客户端什么也没有得到。我使用的是REST开发人员的客户端(“Postman”),这是我得到的标头:

Cache-Control →private
Content-Length →0
Content-Type →application/json
Date →Mon, 14 Jul 2014 16:05:46 GMT
Expires →Wed, 31 Dec 1969 19:00:00 EST
P3P →CP="ALL"
Server →Apache-Coyote/1.1
Transfer-Encoding →chunked

(复制并粘贴,看起来就像那样。我不知道邮差为什么会显示这些箭头!)

知道我错过了什么吗?代理是否需要以某种方式解包它从内部客户机收到的响应,并在将其返回给原始客户机之前重新打包?请询问您需要澄清的任何问题。谢谢!

编辑

等!可能是我的响应有一个输入流,我需要读取它并写出并输出流到客户端 - 或类似的东西?

共有1个答案

弓嘉纳
2023-03-14

您正在关闭客户端,因此不会在打开的客户端上下文中解开响应。解开响应的包装,关闭客户端,然后返回解开包装的对象。

编辑:

对不起,不是您的客户。我相信在响应对象中,你有一个关闭()方法。

很像这样:

Client client = ClientFactory.newClient();
            WebTarget target = client.target("http://foo.com/resource");
            Response response = target.request().get();
            String value = response.readEntity(String.class);
            response.close();  // You should close connections!
return value;
 类似资料:
  • 我试图使用JAX-RS从REST服务下载一个文件。这是我的代码,它通过发送GET请求调用下载: 然而,我面临着将响应转换为实际文件对象的问题。所以我所做的是以下几点: 创建的文件无效,我调试了代码并注意到输出包含一个类似的字符串(大得多): Superstore.TWB YSI 7 D M 3 F 编辑:引用关于HTTP响应的REST API引用: 反应体 以下内容之一,具体取决于工作簿的格式:

  • 我尝试将代理添加到Apache CXF3客户端API中。

  • 有人知道出了什么问题吗?

  • 我试图在JBoss AS 7.1下部署一个简单的web应用程序,该应用程序与Resteasy捆绑在一起。根据文档,只需要(至少)一个空的、一个带有注释的和其他类的的类 下面是我所遵循的文档: https://docs.jboss.org/author/display/as7/jax-rs+reference+guide https://docs.jboss.org/author/display/a

  • 我尝试构建一个带有Rest服务和EJB注入的Java EE7应用程序。我创建了一个多模块maven项目,并将其部署在Glassfish 4上。我最后一个EAR包含一个带有EJB的JAR,例如,带有我的Rest服务定义: 当我部署我的应用程序时,我看到下面的日志似乎还可以。即使我想知道它为什么定义“java:global”JNDI,因为默认情况下@Stateless EJB是@local: 编辑1:

  • 在JAX-RS(RestEasy)中,我希望实现一个客户机过滤器,在发送请求之前修改头,这样我就不会对每个调用都手动执行此操作。 目前,我正在接收端执行此操作,以便在到达资源之前拦截请求。