Как сделать обработку ошибок внутри ObjectFactory.start () - PullRequest
0 голосов
/ 27 февраля 2020

Я использую PicoContainer с Cucumber, и он работает, но когда он не работает из-за ошибки пользователя, ie. плохой или отсутствующий файл конфигурации, сообщение об ошибке не связано с проблемой (в нем говорится о Cucumber), и есть тонна трассировки стека, которая шумит для моих пользователей, которым просто нужно знать, что их файл конфигурации плох. В идеале программа просто остановится и напечатает нетехническое сообщение об ошибке.

Ищите здесь любые варианты. Все, что я могу придумать, это вызвать system.exit (1), который я еще не пробовал.

Кроме того, я использую бегун JUnit, что означает, что я не контролирую main () и не могу поймать исключение, если выбрасываю его.

public final class CustomObjectFactory implements ObjectFactory {
    private final Set<Class<?>> classes = new HashSet();
    private MutablePicoContainer pico;

    public CustomObjectFactory() {
    }

    private static boolean isInstantiable(Class<?> clazz) {
        boolean isNonStaticInnerClass = !Modifier.isStatic(clazz.getModifiers()) && clazz.getEnclosingClass() != null;
        return Modifier.isPublic(clazz.getModifiers()) && !Modifier.isAbstract(clazz.getModifiers()) && !isNonStaticInnerClass;
    }

    public void start() {
        this.pico = (new PicoBuilder()).withCaching().withLifecycle().build();
        Iterator var1 = this.classes.iterator();

        while(var1.hasNext()) {
            Class<?> clazz = (Class)var1.next();
            this.pico.addComponent(clazz);
        }


        // This is where the application specific stuff happens
        // Everything else in this class is a copy of .... what's it called.. PicoObjectFactory?

        // DO MY APPLICATION SPECIFIC STUFF
        // Inside of here, objects are constructed and pico.addComponent(...) is called with those constructed objects.
        // But there can be errors in that process.

        MySpecialPicoContainerComponentAdder.addMyComponents(this.pico);

        // In other words, what if I just stick a throw new RuntimeException() right here on this line?

        this.pico.start();
    }
...
...
}

In resources/META-INF/services У меня есть
com.acme.mystuff.moreofmystuff.stepdefinitions.CustomObjectFactory

Извините, у меня нет больше журналов / информации сейчас, я буду редактировать, когда смогу получить информацию: )

Также я понятия не имею, правильно ли я делаю. Совет приветствуется!

...