ZipEntry возвращает null из BLOB ZipArchiveInputStream

Основная проблема в том, что я получаю нулевой результат от моего zipEntry. Что я делаю, так это получаю BLOB.zip из базы данных, направляя его во входной поток, оттуда в zipArchiveInputStream и в ZipEntry, который каждый раз возвращает null. Я решил использовать ZipArchiveInputStream после использования ZipInputStream с такими же нулевыми результатами.

public byte[] getXMLStream() {              
    try {
        return this.jdbcTemplate.queryForObject("SELECT SAVEDATA FROM JDBEVPP1.TEVP005 WHERE GFNR = 357420", byte[].class); }                                   
    catch(DataAccessException ex) {
        ex.printStackTrace();
        return null;}}

@Override
public void getXMLdata() {
    byte[] str = getXMLStream();
     InputStream myInputStream = new ByteArrayInputStream(str);
     ZipArchiveInputStream fis = new ZipArchiveInputStream(myInputStream);
     ZipEntry entry = null;
     try { 
         while ( (entry = fis.getNextZipEntry()) != null ) { 
            System.out.println(entry.getName());
         }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Мне просто нужно получить этот xml и распечатать его в консоли для тестирования. Любая идея, что здесь не так или как заставить это работать?

РЕДАКТИРОВАТЬ: внутри BLOB - это формат XML, который мне нужно представить на консоли.


person Community    schedule 21.12.2018    source источник
comment
Сохраните поток BLOB в файл и используйте редактор hey, чтобы проверить заголовок файла magic, чтобы убедиться, что это действительно ZIP-файл. Также используйте инструменты zip, такие как 7zip, чтобы проверить, является ли BLOB допустимым сжатым архивом.   -  person Robert    schedule 21.12.2018
comment
Кажется, единственная ошибка была в типе xml. Я использовал GZIPInputStream, и он работает.   -  person    schedule 21.12.2018
comment
GZIP и ZIP - это два совершенно разных формата...   -  person Robert    schedule 21.12.2018
comment
А я не знал этого раньше. Это был очень хороший день, я многому сегодня научился. :)   -  person    schedule 22.12.2018


Ответы (1)


Я решаю эту проблему с помощью GZIPInputStream. Кажется, это общий xml в конце.

try {
        GZIPInputStream gzip = new GZIPInputStream(bys);
        Reader decoder = new InputStreamReader(gzip, "UTF-8");
        BufferedReader buffered = new BufferedReader(decoder);
        System.out.println(buffered.readLine());
        String data = buffered.readLine();
        InputSource xml = new InputSource(new StringReader(data));
        System.out.println(xml);

    } catch (IOException e) {
        e.printStackTrace();
    }
person Community    schedule 21.12.2018