#java #jakarta-ee #resources #jax-rs
#java #джакарта-ee #Ресурсы #jax-rs
Вопрос:
Env(Jboss КАК 7, Wildfly 8)
ранее я мог погрузиться в проект, используя jax-rs. где у ресурса jax-rs была задача шлюзовать другой ресурс jax-rs. во время реализации я нашел Response.newFrom(), и это отлично подходило для такого рода задач, которые были у компонента gateway. Также в документе java указано, что его можно использовать для такого варианта использования: «Обратите внимание, что если объект поддерживается неиспользуемым входным потоком, ссылка на поток копируется».
Но на самом деле первый тест стал красным. Итак, копнув немного глубже, я нашел следующую реализацию
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()
возвращает Null !!
для всех, у кого такая же проблема, я закончил тем, что сделал это..
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… не стесняйтесь
Комментарии:
1. часть
b.entity(response.getEntity())
должна позаботиться о копировании потока ответов.2. черт возьми, вы правы, javadoc средства получения говорит, что он должен возвращать неиспользованный входной поток, если таковой имеется, но wildfly 8.1.0.Final возвращает null ..
3. даже jboss как 7 возвращает null … при вызове
getEntity()
@maress