Чтение содержимого из InputStream в методах API bitbucket - PullRequest
0 голосов
/ 25 сентября 2018

Я пытаюсь прочитать файл для ловушки предварительного получения с помощью API-интерфейса bitbucket.Дело в том, что мне нужно проверить некоторые конкретные файлы и контент, чтобы подтвердить или отклонить коммит.Вы можете увидеть код здесь:

request.getRefChanges().stream()
.filter(change -> change.getRef().getId().equalsIgnoreCase("refs/heads/master"))
.forEach(refChange -> {
     scmService.getBulkContentCommandFactory(request.getRepository())                
     .contents(new BulkContentCommandParameters.Builder(refChange.getToHash())
            .sinceCommitId(refChange.getFromHash())
            .build(), new BulkContentCallback() {
                    @Override
                    public void onFile(@Nonnull BulkFile file, @Nonnull InputStream content) {
                        this.processFile(file, content);
                    }
                        private void processFile(BulkFile file, InputStream content) {
                            log.info("Streaming file {} with content id {}, file: {}, size: {}",
                                    file.getPath(), file.getContentId(), file.getSize());
                            try {
                                StringWriter writer = new StringWriter();
                                //IOUtils.copy(content, writer, "UTF-8");
                                log.info("file content: {}", readSB(content));
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                log.error(e.getMessage(), e);
                            }
                        }
                    }).call();});

Проблема в том, что InputStream, который я получаю из onFile метода BulkContentCallback , все равно что просто дать мне первую строку файла.Я пытался с различными реализациями в методе readSB, как Первая реализация InputStream

    StringBuilder textBuilder = new StringBuilder();
    try (Reader reader = new BufferedReader(new InputStreamReader
              (inputStream, Charset.forName(StandardCharsets.UTF_8.name())))) {
                int c = 0;
                while ((c = reader.read()) != -1) {
                    textBuilder.append((char) c);
                }
            }

    return textBuilder.toString();

Или Вторая реализация InputStream :

 ByteArrayOutputStream buffer = new ByteArrayOutputStream();
 int nRead;
 byte[] data = new byte[1024];
 while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
            buffer.write(data, 0, nRead);
        }

 buffer.flush();
 byte[] byteArray = buffer.toByteArray();

 String text = new String(byteArray, StandardCharsets.UTF_8);

 return text;

Или Третья реализация InputStream :

try (BufferedReader buffer = new BufferedReader(new InputStreamReader(inputStream))) {
        return buffer.lines().collect(Collectors.joining("\n"))
}

Но результат всегда один и тот же, просто печатается первая строка.

Есть идеи?

1 Ответ

0 голосов
/ 26 сентября 2018

Обнаружено как ошибка в версии Bitbucket 5.13.0 и более ранних (протестирована в 5.10.1 и более поздних версиях и не работает).Я только что обновился до 5.14.0 и работает правильно.

Надеюсь, это поможет.

...