Env(Jboss AS 7,Wildfly 8)
之前我能够使用jax-rs潜入项目。其中jax-rs资源有任务来连接另一个jax-rs资源。 在实现时,我发现了Response.newFrom(),对于网关组件所具有的那种任务来说,这听起来很棒。 此外,java doc声明它可以用于那种用例 “请注意,如果实体由未使用的输入流支持,则会复制对流的引用。”
但实际上第一次测试变红了。所以深入挖掘,我找到了以下实现
public static ResponseBuilder fromResponse(Response response) {
ResponseBuilder b = status(response.getStatus());
if (response.hasEntity()) {
b.entity(response.getEntity());
}
for (String headerName : response.getHeaders().keySet()) {
List<Object> headerValues = response.getHeaders().get(headerName);
for (Object headerValue : headerValues) {
b.header(headerName, headerValue);
}
}
return b;
}
getEntity()
返回空!
对于遇到同样问题的每个人,我最终都这样做了。
private <R> Response asNewResponse(Response response, GenericType<EntityType> sourceType, Function<EntityType, R> transformer ) {
boolean backed = response.bufferEntity();
if (backed) {
if (response.getStatus() == Response.Status.OK.getStatusCode()) {
Addresses entity = response.readEntity(sourceType);
return Response.status(response.getStatus()).entity(transformer.apply(entity)).build();
} else
return Response.status(response.getStatus()).entity(response.readEntity(new GenericType<String>() {
})).build();
} else {
if (response.getEntity() instanceof EntityType) {
return Response.status(response.getStatus()).entity(transformer.apply((EntityType)response.getEntity())).build();
}
return Response.status(response.getStatus()).entity(response.getEntity()).build();
}
}
我对完全阅读流并不高兴,所以如果有人知道为什么getEntity()会返回null ...随意