java - 使用JAX-RS(RESTEasy)作为中间件: brokering a client's request to another server

标签 java jax-rs resteasy

我正在使用 JAX-RS (RESTEasy) 构建一个服务器,该服务器将为客户端提供 REST 接口(interface)。服务器将充当客户端和另一台服务器之间的代理。另一个服务器,即第 3 方服务器 (JasperReports),也具有 REST 接口(interface)。我想使用 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”),以下是我返回的 header :

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

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

知道我在这里缺少什么吗?代理是否需要以某种方式解压从内部客户端收到的响应,并在将其返回到原始客户端之前重新打包?请提出您需要澄清的任何问题。谢谢!

编辑

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

最佳答案

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

编辑:

抱歉,不是您的客户。我相信 Response 对象有一个 close() 方法。

差不多是这样:

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;

关于java - 使用JAX-RS(RESTEasy)作为中间件: brokering a client's request to another server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742305/

相关文章:

java - Raspberry Pi 2 Java - 无法加载主类/未找到类 WebView

java - 如何在 JEE 中定义处理多部分数据的 JAX-RS 服务?

java - JerseyConfig 在 Spring Boot 应用程序中覆盖 @RestController

java - ProcessingException : org. codehaus.jackson.map.JsonMappingException:无法从 START_ARRAY token 中反序列化 X 的实例

servlets - 轻松休息和初始化参数 - 如何访问?

java - 返回多个结果集的查询

java - 如何同步通知生成器和警报管理器?

java - Base64 和 MimeUtility 之间的不同结果

jax-rs - 在 Quarkus native 中运行的 JAX-RS 应用程序中使用 Jedis 池会导致 ClassNotFoundException : org. apache.commons.pool2.impl.DefaultEvictionPolicy

serialization - 我可以在 RestEasy 中指定用于方法结果转换的 jackson @JsonView 吗?