Предотвратить Джерси от закрытия InputStream при вводе параметров? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть 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, когда он вводиттело?Или какой-нибудь способ открыть его снова?Спасибо

...