2017-11-20 3 views
-1

Ich habe Frühling MVC Projekt zusammen mit Drools.Feder MVC | @Inject Annotation geben NullPointerException

Das Projekt hat eine Steuerung wie folgt:

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"; 

    } 

} 

Die KieSpringUtil Klasse unten ist ::

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); 
    } 

} 

Der mvc-Dispatcher-servlet.xml unter:

<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> 

Beim Versuch, die Methode rulesExecutor der Klasse KieSpringUtil auszuführen, wird NullPointerException (NPE) zurückgegeben. Das KieSpringUtil ist bereits mit @Inject versehen, sodass es verfügbar sein sollte. Warum ist es als null vorhanden?

Info :: Frühling Version: 3.0.5.RELEASE Tomcat: 7.0.1

+1

Aktien der vollständigen Stacktrace – pvpkiran

Antwort

-1

Ich denke, man Spring @Autowired statt @Inject

+0

das ist nicht korrekt verwendet werden soll. '@ Autowired' und' @Inject' sind gleich, was das Autowiren betrifft. Einziger Unterschied ist in der Art und Weise, wie das Autowiren durchgeführt wird (byName, byType oder byQualifier) ​​und deren Reihenfolge – pvpkiran

+0

Hmm, ok, tut mir leid, war mir dessen nicht bewusst, aber ich würde es zumindest einmal versuchen, nur um sicher zu gehen. – funfried

+0

das könnte helfen. http://www.baeldung.com/spring-annotations-resource-inject-autowire – pvpkiran