Входной поток начинается с -1 - PullRequest
0 голосов
/ 08 мая 2020

Когда файл загружается с медленным (только) соединением, используя мой CXF REST API, я получаю ошибку Couldn't find MIME boundary. Поэтому я отладил основной код CXF, чтобы понять, почему. Теперь я смотрю на этот код CXF Core [1].

    private static boolean readTillFirstBoundary(PushbackInputStream pbs, byte[] bp) throws IOException {

        // work around a bug in PushBackInputStream where the buffer isn't
        // initialized
        // and available always returns 0.
        int value = pbs.read();
        pbs.unread(value);
        while (value != -1) {
            value = pbs.read();

Когда соединение клиента с сервером очень медленное, первое значение входного потока почти всегда -1. Это приводит к ошибке Couldn't find MIME boundary на более позднем этапе потока.

Если я изменю код, чтобы пропустить первый байт, если он -1, как показано ниже, он будет работать плавно.

    private static boolean readTillFirstBoundary(PushbackInputStream pbs, byte[] bp) throws IOException {

        // work around a bug in PushBackInputStream where the buffer isn't
        // initialized
        // and available always returns 0.
        int value = pbs.read();
        if (value == -1) {                <<<<<< if the first byte is -1,
            value = pbs.read();           <<<<<< ignore that and read the  
        }                                 <<<<<< next byte
        pbs.unread(value);
        while (value != -1) {
            value = pbs.read();

Есть идеи, в чем может быть причина?

[1] https://github.com/apache/cxf/blob/cxf-3.2.8/core/src/main/java/org/apache/cxf/attachment/AttachmentDeserializer.java#L264

1 Ответ

0 голосов
/ 10 мая 2020

Оказалось, что это ошибка tomcat [1]. : - /

Работает файл с более поздними версиями Tomcat.

[1] https://bz.apache.org/bugzilla/show_bug.cgi?id=64195

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...