У меня есть Factory<T>
, который использует InputStream
из ContainerRequestContext
для создания T
.На своем заводе я отмечаю и сбрасываю InputStream
, чтобы Джерси мог затем ввести тело в параметр конечной точки.Это прекрасно работает
проблема : если я поменяю местами порядок этих параметров (сначала String body
, затем @Context T t
), то он сломается.Джерси закрыл InputStream
до того, как мой Factory<T>
попытается прочитать из InputStream.
Factory<T>
:
@Override
public T provide() {
InputStream inputStream = containerRequestContext.getEntityStream();
inputStream.mark(Integer.MAX_VALUE);
T t = new T(inputStream);
inputStream.reset();
return t;
}
ResourceConfig
конечная точка (работает):
@POST
public Response getBodyDouble(@Context T t, String body) {}
ResourceConfig
конечная точка (создание T завершается неудачно):
@POST
public Response getBodyDouble(String body, @Context T t) {}
Трассировка стека:
java.lang.IllegalStateException: Entity input stream has already been closed.
at org.glassfish.jersey.message.internal.EntityInputStream.ensureNotClosed(EntityInputStream.java:225)
at org.glassfish.jersey.message.internal.InboundMessageContext.getEntityStream(InboundMessageContext.java:762)
at com.-.TFactory.provide(TFactory.java:xx)
Есть ли способ запретить Джерси закрывать InputStream, когда он вводиттело?Или какой-нибудь способ открыть его снова?Спасибо