1

I was reading through a Spring tutorial and came across the following example. It mentioned that Spring supports the Java EE annotation @Resource. I was trying the example with the source below, but it gave an InvocationTargetException. I suppose it was probably due to the SpellChecker object could not be injected properly.

Relevant stacktrace: Feb 27, 2018 8:56:23 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5d76b067: startup date [Tue Feb 27 20:56:23 CST 2018];root of context hierarchy Feb 27, 2018 8:56:32 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: Loading XML bean definitions from class path resource [Beans.xml] Inside TextEditor constructor.Inside SpellChecker constructor. Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.base/java.lang.reflect.Method.invoke(Unknown Source) at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) Caused by: java.lang.NullPointerException at com.tutorialspoint.TextEditor.spellCheck(TextEditor.java:22) at com.tutorialspoint.MainApp.main(MainApp.java:10) ... 8 more

I attempted with the @Autowired annotation instead of the @Resource annotation, and it gave the expected result:

Inside TextEditor constructor.
Inside SpellChecker constructor.
Inside checkSpelling.

Would like to see if you can kindly advise / point out mistakes if any, thanks a lot.

(Reference: https://www.tutorialspoint.com/spring/spring_jsr250_annotations.htm)

[TextEditor.java]

import javax.annotation.Resource;

public class TextEditor {
  private SpellChecker spellChecker;

  public TextEditor() {
    System.out.println("Inside TextEditor constructor.");
  }

  @Resource(name = "spellChecker")
  public void setSpellChecker(SpellChecker spellChecker) {
    this.spellChecker = spellChecker;
  }

  public SpellChecker getSpellChecker() {
    return spellChecker;
  }

  public void spellCheck() {
    spellChecker.checkSpelling(); //Gave InvocationTargetException here
  }
}

[SpellChecker.java]

public class SpellChecker {
  public SpellChecker() {
    System.out.println("Inside SpellChecker constructor.");
  }

  public void checkSpelling() {
    System.out.println("Inside checkSpelling.");
  }
}

[MainApp.java]

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
  public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
    TextEditor te = (TextEditor) context.getBean("textEditor");
    te.spellCheck();
  }
}

[Beans.xml]

<?xml version = "1.0" encoding = "UTF-8"?>

<beans xmlns = "http://www.springframework.org/schema/beans"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:context = "http://www.springframework.org/schema/context"
   xsi:schemaLocation = "http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:annotation-config/>

   <!-- Definition for textEditor bean without constructor-arg  -->
   <bean id = "textEditor" name = "textEditor" class = "com.tutorialspoint.TextEditor"></bean>

   <!-- Definition for spellChecker bean -->
   <bean id = "spellChecker" name = "spellChecker" class = "com.tutorialspoint.SpellChecker"></bean>
</beans>
Patrick C.
  • 1,339
  • 3
  • 16
  • 31
  • *"but it gave an `InvocationTargetException`"* Show us the full stacktrace, so we can see the **real** exception. --- http://idownvotedbecau.se/noexceptiondetails/ – Andreas Feb 28 '18 at 05:16
  • Thanks for the reminder, supplemented the stacktrace. – Patrick C. Feb 28 '18 at 05:23

0 Answers0