2016-10-25 5 views
1

Я вызываю метод, который принимает InputStream. Вот метод на GitHub: https://github.com/drewnoakes/metadata-extractor/blob/2.8.0/Source/com/drew/imaging/ImageMetadataReader.java#L89Передача BufferedInputStream методу, который принимает InputStream

Я называю этот метод с BufferedInputStream, который должен работать, так как он является потомком InputStream, но я получаю эту ошибку:

No signature of method: static com.drew.imaging.ImageMetadataReader.readMetadata() is applicable for argument types: (java.io.BufferedInputStream) values: [[email protected]] 
Possible solutions: readMetadata(java.io.File), readMetadata(java.io.BufferedInputStream, boolean). Stacktrace follows: 
Message: No signature of method: static com.drew.imaging.ImageMetadataReader.readMetadata() is applicable for argument types: (java.io.BufferedInputStream) values: [[email protected]] 
Possible solutions: readMetadata(java.io.File), readMetadata(java.io.BufferedInputStream, boolean) 
    Line | Method 
->> 137 | settings in com.foo.scanner.AdminController 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
| 198 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter 
|  63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter 
|  53 | doFilter in grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter 
|  62 | doFilter in grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter 
|  59 | doFilter in grails.plugin.springsecurity.web.SecurityRequestHolderFilter 

Вот мой код:

println file62.name //prints name of the file 
println file62.inputStream.getClass() //prints java.io.BufferedInputStream 
InputStream is = (InputStream)file62.inputStream 
Metadata metadata = com.drew.imaging.ImageMetadataReader.readMetadata(is) //readMetadata expects InputStream 

версия библиотеки у меня есть:

✗ grails dependency-report | grep "drew" +--- com.drewnoakes:metadata-extractor:2.9.1 +--- com.drewnoakes:metadata-extractor:2.9.1 +--- com.drewnoakes:metadata-extractor:2.9.1

и этот метод в 2.9.1: https://github.com/drewnoakes/metadata-extractor/blob/2.9.1/Source/com/drew/imaging/ImageMetadataReader.java#L88

ответ

3

Исключение говорит, что метод ожидает либо в File, или BufferedInputStreamи логическое значение. Нет перегрузки, которая ожидает только a BufferedInputStream.

Если вы уверены, что формальные параметры и фактические параметры совпадают, то наиболее вероятной причиной такого исключения (вызванного формальным несоответствием параметров) является то, что вокруг лежит старая банка. Запустите mvn clean, gradle clean, проверьте каталог lib вашего веб-контейнера и, как правило, устраните ошибочные банки из вашей системы.

+0

Ссылка github указывает, что метод ожидает 'InputStream'. Могу ли я передать «BufferedInputStream», где ожидается «InputStream»? – Anthony

+2

Вы можете. Но исключение не согласуется с github. У вас есть другая версия банки? –

+0

Я просматриваю историю файла. Метод, используемый для ввода 'InputStream', но больше не работает. Похоже, у вас есть более новая банка, чем 2.8.0. –

Смежные вопросы