2017-11-20 5 views
-1

私は、MVCプロジェクトをdroolsと一緒に持っています。Spring MVC | @Inject注釈でNullPointerExceptionが発生する

以下のようにプロジェクトがコントローラを有する:KieSpringUtilクラスは以下である

package com.kiespring.mvc.controller; 

import org.kie.spring.beans.Person; 
import org.kie.spring.KieSpringUtil; 
import org.springframework.context.ApplicationContext; 

import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import javax.inject.Inject; 

@Controller 
@RequestMapping("/welcome") 
public class HelloController { 

    @Inject 
    private KieSpringUtil rulesExecutor; 

    @RequestMapping(method = RequestMethod.GET) 
    public String printWelcome(ModelMap model) { 

     System.out.println("Inside the Method Firstttt::"); 
     Person person = new Person("HAL"); 
     System.out.println("Inside the Method Firstttt:: 1"); 

     //Error while executing below line 
     rulesExecutor.executeRules(person); 

     System.out.println("Inside the Method Firstttt:: 2"); 
     model.addAttribute("isHappy", person.isHappy()); 
     model.addAttribute("message", "Spring 3 MVC Hello World"); 
     return "hello"; 

    } 

} 

::

package org.kie.spring; 

import org.kie.api.KieBase; 
import org.kie.api.runtime.StatelessKieSession; 
import org.kie.spring.beans.Person; 
import org.springframework.context.ApplicationContext; 
import org.springframework.stereotype.Service; 

import javax.inject.Inject; 

@Service 
public class KieSpringUtil { 

    @Inject 
    ApplicationContext context; 

    public void executeRules(Person person){ 
     System.out.println("Inside executeRules"); 
     KieBase kbase = (KieBase) context.getBean("kbase1"); 
     System.out.println("Inside executeRules1"); 
     StatelessKieSession statelessKieSession = kbase.newStatelessKieSession(); 
     System.out.println("Inside executeRules2"); 
     statelessKieSession.execute(person); 
    } 

} 

MVC-ディスパッチャ-servlet.xmlは以下である:

<beans 
xmlns="http://www.springframework.org/schema/beans" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:kie="http://drools.org/schema/kie-spring" 
     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 
     http://drools.org/schema/kie-spring file:\C:\Users\677410\files\kie-spring.xsd"> 

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix"> 
      <value>/WEB-INF/pages/</value> 
     </property> 
     <property name="suffix"> 
      <value>.jsp</value> 
     </property> 
    </bean> 

    <context:component-scan base-package="com.kiespring.mvc.controller" /> 
    <context:component-scan base-package="org.kie.spring.beans" /> 
    <bean id="kieUtil" class="org.kie.spring.KieSpringUtil"/> 

    <kie:kmodule id="sample_module"> 
    <kie:kbase name="kbase1" packages="org.drools.spring.sample"/> 
    </kie:kmodule> 

    <bean id="kiePostProcessor" class="org.kie.spring.KModuleBeanFactoryPostProcessor"/> 
</beans> 

KieSpringUtilクラスのrulesExecutorメソッドを実行しようとすると、NullPointerException(NPE)が返されます。 KieSpringUtilにはすでに@Injectという注釈が付けられています。なぜそれがヌルとして存在しますか?

情報::春バージョン:3.0.5.RELEASE のTomcat:7.0.1

+1

@Injectの完全なスタックトレース – pvpkiran

答えて

-1

は、私はあなたが正しくない春の@Autowired代わりにシェア

+0

のthatsを使用する必要がありますね。 '@ Autowired'と' @Inject'はautowiringに関する限り同じです。 autowiringが行われる方法(byName、byType、byQualifier)とその順序に違いがあるだけです。 – pvpkiran

+0

ええ、申し訳ありませんが、それを認識していませんでしたが、確かに実際に少なくとも1回は試してみます。 – funfried

+0

これは役に立ちます。 http://www.baeldung.com/spring-annotations-resource-inject-autowire – pvpkiran

関連する問題