Я получаю ArrayIndexOutOfBoundsException
при запуске службы (создание Bean), когда я использую функции Java 8.
Java 8 настроен и работает. Код правильно компилируется. При запуске службы служба не может прослушивать порт, поскольку beans не создается. Когда я меняю код (удаляю java 8 constructs), начинается сервис, и все работает нормально.
Это код, который я использую (рабочий код, для которого запускается сервис):
for (Item itemObject : response) {
if (itemObject.hasId()) {
idList.add(String.valueOf(itemObject.Id());
}
}
Тот же код с использованием конструкций Java 8:
response.parallelStream()
.filter(itemObject -> itemObject.hasId())
.map(itemObject -> itemObject.getId())
.forEach(id -> idList.add(id));
bean для класса, содержащего этот фрагмент кода, создается с помощью сканирования компонентов.
Ниже приведено сообщение об исключении, когда второй кодовый блок используется вместо первого:
Exiting with throwable: java.lang.IllegalArgumentException: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/workspace/.../GetContainerIdForFcSkuAdapter.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 51880
java.lang.IllegalArgumentException: org.springframework.beans.factory.BeanDefinitionStoreException: Failed to read candidate component class: URL [jar:file:/workspace....Some.class]; nested exception is java.lang.ArrayIndexOutOfBoundsException: 51880
Что для меня не имеет смысла, почему код внутри функции (который не является конструктором класса bean) закрывается при создании bean. Я спрашиваю об этом, потому что исключения не существует, когда я использую обычный цикл for вместо параллельного потока. Если при вызове функции не возникает ArrayOutOfBoundsException
, и этот код действительно используется.
Как я могу это исправить?