level35.lesson10.bonus01 неизвестная ошибка

Друзья, нужная помощь!
Решаю задачу level35.lesson10.bonus01 и столкнулся с неожиданным поведением.
При проверке решения выдается ошибка «Неизвестная ошибка при работе с сервером».
Сначала грешил на левые пакете в импорте, но попробовав отправить неизменный код(то есть задачу в том виде в котором ее мне выдали), мне выдалась та же ошибка.
Остальные задачи нормально отрабатывают. Пробовал шаманство в виде invalidate cache, не помогло.
Я в недоумении, что я делаю не так?

4 комментария

yulia_redgirl
Та же проблема с той же задачей. У вас получилось пофиксить это как-нибудь?
svetlana-evg-petrova
Тоже никак не сдать эту задачу( Выдает ошибку: «Неизвестная ошибка при работе с сервером». Подскажите, пожалуйста, что не так?

package com.javarush.test.level35.lesson10.bonus01;

import java.io.*;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashSet;
import java.util.Set;

/* ClassLoader - что это такое?
Реализуйте логику метода getAllAnimals.
Аргумент метода pathToAnimals - это абсолютный путь к директории, в которой хранятся скомпилированные классы.
Путь не обязательно содержит / в конце.
НЕ все классы наследуются от интерфейса Animal.
НЕ все классы имеют публичный конструктор без параметров.
Только для классов, которые наследуются от Animal и имеют публичный конструктор без параметров, - создать по одному объекту.
Добавить созданные объекты в результирующий сет и вернуть.
Метод main не участвует в тестировании.
*/
public class Solution {
    public static void main(String[] args) {
        Set<? extends Animal> allAnimals = getAllAnimals("/home/svetlana/dev/JavaRushHomeWork/out/production/JavaRushHomeWork/com/javarush/test/level35/lesson10/bonus01/data");
        System.out.println(allAnimals);
    }

    public static Set<? extends Animal> getAllAnimals(String pathToAnimals) {
        Set<Animal> result = new HashSet<>();
        Path path = Paths.get(pathToAnimals);

        if (!Files.isDirectory(path))
            return result;

        File[] files = getClassFiles(path);

        try {
            for (File classFile : files) {
                ClassLoader cl = getFileClassLoader(classFile);
                String className = classFile.getName().replace(".class", "");
                Class clazz = cl.loadClass(className);

                boolean hasInterface = false;
                Class[] interfaces = clazz.getInterfaces();
                for (Class i : interfaces)
                    if (Animal.class == i) {
                        hasInterface = true;
                        break;
                    }
                if (!hasInterface) continue;

                boolean hasConstructor = false;
                Constructor[] constructors = clazz.getConstructors();
                for (Constructor c : constructors)
                    if (Modifier.isPublic(c.getModifiers()) && c.getParameterTypes().length == 0) {
                        hasConstructor = true;
                        break;
                    }
                if (!hasConstructor) continue;

                result.add((Animal) clazz.newInstance());
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return result;
    }

    public static File[] getClassFiles(Path path) {
        File[] files = path.toFile().listFiles(new FileFilter() {
            @Override
            public boolean accept(File pathname) {
                return pathname.getName().endsWith(".class");
            }
        });
        return files;
    }

    public static ClassLoader getFileClassLoader(final File classFile) {
        return new ClassLoader() {
            @Override
            protected Class<?> findClass(String name) throws ClassNotFoundException {
                byte[] bytes = getBytes(classFile);
                return defineClass(null, bytes, 0, bytes.length);
            }
        };
    }


    private static byte[] getBytes(File file) {
        try {
            return Files.readAllBytes(file.toPath());
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }
}
ferasinka
Проблема по прежнему актуальна!
ferasinka
Нет, не актуальна :-)
Это я случайно использовал метод из 1.8
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.