2016-03-21 11 views
0

Ich versuche zurzeit, eine Webanwendung zu testen, aber ich bekomme immer eine NullPointerException, wenn ich versuche, Websphere 8.5 zu starten, was die BeanInstantiationException und BeanCreationException verursacht. Ich habe versucht, mit den Anmerkungen herumzuspielen und die Beans in der Datei mvc-dispatcher-servlet.xml zu entfernen, aber derselbe Fehler tritt immer noch auf, aber mit einer anderen Bean. Ich bin mir nicht sicher, was ich ändern muss, um das zu erreichen.BeanCreationException verursacht durch BeanInstantiationException verursacht durch NullPointerException: Name

MVC-Dispatcher-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:mvc="http://www.springframework.org/schema/mvc" 
xmlns:jee="http://www.springframework.org/schema/jee" 
xmlns:aop="http://www.springframework.org/schema/aop" 
xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc.xsd 
    http://www.springframework.org/schema/jee 
    http://www.springframework.org/schema/jee/spring-jee-4.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context.xsd 
    http://www.springframework.org/schema/aop/ 
    http://www.springframework.org/schema/aop/spring-aop-4.1.xsd"> 

<context:component-scan base-package="com.trac.controller" /> 
<context:component-scan base-package="com.trac.model" /> 

<mvc:annotation-driven /> 

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

<mvc:resources mapping="/resources/**" location="/resources/" /> 

<!-- Configure to plugin JSON as request and response in method handler --> 
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> 
    <property name="messageConverters"> 
     <list> 
      <ref bean="jsonMessageConverter"/> 
     </list> 
    </property> 
</bean> 

<!-- Configure bean to convert JSON to POJO and vice versa --> 
<bean id="jsonMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"> 
</bean> 

<bean id="agencyDao" class="com.trac.dao.AgencyDao"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 
<bean id="subsidyDao" class="com.trac.dao.SubsidyDao"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 
<bean id="agentDao" class="com.trac.dao.AgentDao"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 
<bean id="verificationDao" class="com.trac.dao.VerificationDao"> 
    <property name="dataSource" ref="dataSource"/> 
</bean> 

<bean id="mainController" class="com.trac.controller.MainController"> 
    <property name="sessionBean" ref="sessionBean"></property> 
    <property name="racfGroup" ref="racfGroup"></property> 
</bean> 

<bean id="racfGroup" class="com.trac.verification.RacfGroupData"> 
    <property name="securityService" ref="securityService"/> 
</bean> 

<bean id="securityService" class="com.security.client.services.SecurityService"/> 

<jee:jndi-lookup id="dataSource" jndi-name="jdbc/aoa" resource-ref="true"/> 

MainController.java (wo die Bohnen eingeleitet werden)

@Controller 
public class MainController { 

private CompanyOrgVerification org = new CompanyOrgVerification(); 

@Autowired 
private SessionBean session; 
private RacfGroupData racfGroup; 

//returns the agent search page 
@RequestMapping(URIConstants.WELCOME_PAGE) 
public ModelAndView welcome(HttpServletRequest request){ 

    session.setUserId("T5575"); 
    session.setPermission("INFOA", "U"); 

    if(racfGroup.getRacfGroups(session.getUserId())){ 
     session.setPermission("INFOA", "U"); 
     return new ModelAndView("index"); 
    }else{ 
     ModelAndView error = new ModelAndView(); 
     error.setViewName("error"); 
     return error; 
    } 
}public SessionBean getSessionBean(){ 
    return session; 
} 
public void setSessionBean(SessionBean session){ 
    this.session = session; 
} 
public RacfGroupData getRacfGroup(){ 
    return racfGroup; 
} 
public void setRacfGroup(RacfGroupData racfGroup){ 
    this.racfGroup = racfGroup; 
} 

}

RacfGroupData.java

public class RacfGroupData { 
    private SecurityService securityService; 

    static{ 
     SystemProperties.setProperty("RacfAttempts", String.valueOf(ATTEMPTS)); 
     SystemProperties.setProperty("RacfServerIP", SERVER_IP); 
     SystemProperties.setProperty("RacfServerKey", SERVER_KEY); 
     SystemProperties.setProperty("RacfTimeout", String.valueOf(TIMEOUT)); 
    } 
    // get racf groups for a given user ID. 
    public boolean getRacfGroups(String userID){ 
     GroupLookupResponse groups = securityService.getGroups(userID); 
     Iterator<Group> groupList = groups.getGroups().iterator(); 
     return validateGroup(groupList); 
    } 
    public SecurityService getSecurityService(){ 
     return securityService; 
    } 
    public void setSecurityService(SecurityService securityService){ 
     this.securityService = securityService; 
    } 

Fehler

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'racfGroup': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.security.client.services.SecurityService com.trac.verification.RacfGroupData.securityService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityService' defined in ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.security.client.services.SecurityService]: Constructor threw exception; nested exception is java.lang.NullPointerException: name 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:292) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1185) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:320) 
... 98 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.security.client.services.SecurityService com.trac.verification.RacfGroupData.securityService; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityService' defined in ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.security.client.services.SecurityService]: Constructor threw exception; nested exception is java.lang.NullPointerException: name 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:508) 
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:289) 
... 106 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'securityService' defined in ServletContext resource [/WEB-INF/mvc-dispatcher-servlet.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.security.client.services.SecurityService]: Constructor threw exception; nested exception is java.lang.NullPointerException: name 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1076) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1021) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:504) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:304) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:300) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:195) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1014) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:957) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:855) 
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:480) 
... 108 more 
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [com.security.client.services.SecurityService]: Constructor threw exception; nested exception is java.lang.NullPointerException: name 
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:164) 
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:89) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:1069) 
... 119 more 
Caused by: java.lang.NullPointerException: name 
at feign.Util.checkNotNull(Util.java:99) 
at feign.Target$HardCodedTarget.<init>(Target.java:67) 
at feign.Target$HardCodedTarget.<init>(Target.java:62) 
at feign.Feign$Builder.target(Feign.java:175) 
at com.security.client.services.SecurityService.<init>(SecurityService.java:29) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:80) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:57) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:539) 
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) 
... 121 more 

Security

public class SecurityService implements ISecurityService 
{ 
private JacksonDecoder _decoder = new JacksonDecoder(); 
private SecurityServiceApi _securityServiceApi = Feign.builder() 
    .decoder(_decoder) 
    .encoder(new JacksonEncoder()) 
    .target(SecurityServiceApi.class, System.getProperty("securityServicesBaseUrl")); 

/** 
* @param id 
* @param useTestGroups 
* @return see overriden class or implemented interface 
* @see com.security.client.services.ISecurityService#getUser(java.lang.String, boolean) 
*/ 
@Override 
public UserLookupResponse getUser(String id, boolean useTestGroups) 
{ 
    return _securityServiceApi.getUser(id, useTestGroups); 
} 

/** 
* @param id 
* @param useTestGroups 
* @return see overriden class or implemented interface 
* @see com.security.client.services.ISecurityService#getGroups(java.lang.String, boolean) 
*/ 
@Override 
public GroupLookupResponse getGroups(String id, boolean useTestGroups) 
{ 
    return _securityServiceApi.getGroups(id, useTestGroups); 
} 

/** 
* @param id 
* @return see overriden class or implemented interface 
* @see com.security.client.services.ISecurityService#getUser(java.lang.String) 
*/ 
@Override 
public UserLookupResponse getUser(String id) 
{ 
    return getUser(id, false); 
} 

/** 
* @param id 
* @param testGroups 
* @return see overriden class or implemented interface 
* @see com.security.client.services.ISecurityService#getUser(java.lang.String, byte[]) 
*/ 
@Override 
public UserLookupResponse getUser(String id, byte[] testGroups) 
{ 
    UserLookupRequest userLookupRequest = new UserLookupRequest(); 
    userLookupRequest.setTestGroupsBase64(Base64.encodeBase64String(testGroups)); 

    return _securityServiceApi.getUser(id, userLookupRequest); 
} 

/** 
* @param id 
* @return see overriden class or implemented interface 
* @see com.security.client.services.ISecurityService#getGroups(java.lang.String) 
*/ 
@Override 
public GroupLookupResponse getGroups(String id) 
{ 
    return getGroups(id, false); 
} 

/** 
* @param id 
* @param groups 
* @return see overriden class or implemented interface 
* @see com.security.client.services.ISecurityService#updateGroups(java.lang.String, java.util.List) 
*/ 
@Override 
public void updateGroups(String id, List<Group> groups) 
{ 
    _securityServiceApi.updateGroups(id, createGroupUpdateRequest(groups)); 
} 

/** 
* @param id 
* @param groups see overriden class or implemented interface 
* @see com.security.client.services.ISecurityService#addGroups(java.lang.String, java.util.List) 
*/ 
@Override 
public void addGroups(String id, List<Group> groups) 
{ 
    _securityServiceApi.addGroups(id, createGroupUpdateRequest(groups)); 
} 

/** 
* @param id 
* @param groupName see overriden class or implemented interface 
* @see com.security.client.services.ISecurityService#removeGroup(java.lang.String, java.lang.String) 
*/ 
@Override 
public void removeGroup(String id, String groupName) 
{ 
    _securityServiceApi.removeGroup(id, groupName); 

} 

private GroupUpdateRequest createGroupUpdateRequest(List<Group> groups) 
{ 
    GroupUpdateRequest groupUpdateRequest = new GroupUpdateRequest(); 
    groupUpdateRequest.getGroups().addAll(groups); 

    return groupUpdateRequest; 
} 

Die SecurityClient Bohne aus dem Glas kommt Sicherheits-client-0.jar genannt. Irgendwelche Vorschläge würden geschätzt werden

+0

Wo bist du immer NPE? – 11thdimension

+0

EDIT: vergessen, das Fehlerprotokoll hinzuzufügen. – Karson074

+0

Die Ausnahme kommt von der SecurityService-Klasse. Sie sollten Code dafür hinzufügen. Es gibt einige Objekte, die nicht gesetzt sind und NPE im SecurityService-Konstruktor werfen. Auch @akakashi hat darauf hingewiesen, dass Sie 'ReacfGroupData' in' MainController' automatisch ansteuern sollten, da die Controller-Methode beim Aufruf die NPE auslöst. Die aktuelle Ausnahme liegt jedoch daran, dass SecurityService nicht ordnungsgemäß initialisiert wurde. – 11thdimension

Antwort

0

Sie vermisst Injektion in MainController.java für private RacfGroupData racfGroup; Sie müssen Autowired beide für jede Bohnen.

Verwendung dieses

@Autowired 
private SessionBean session; 
@Autowired 
private RacfGroupData racfGroup; 

refactor in SecurityService.class diese Linien

private JacksonDecoder _decoder = new JacksonDecoder(); 
private SecurityServiceApi _securityServiceApi = Feign.builder() 
    .decoder(_decoder) 
    .encoder(new JacksonEncoder()) 
    .target(SecurityServiceApi.class, System.getProperty("securityServicesBaseUrl")); 

mit diesem

@Autowired 
private JacksonDecoder _decoder; 

private SecurityServiceApi _securityServiceApi; 

@PostConstruct 
public void init() { 
_securityServiceApi = Feign.builder() 
     .decoder(_decoder) 
     .encoder(new JacksonEncoder()) 
     .target(SecurityServiceApi.class, System.getProperty("securityServicesBaseUrl")); 
} 
+0

Ich habe getan, wie Sie vorgeschlagen haben, aber ich bekomme immer noch den gleichen Fehler. – Karson074

+0

Sie fügen auch Standardkonstruktor in SecurityService.class hinzu hinzufügen RacfGroupData.class, auch @Autowired Abhängigkeit in SecurityService.class –

+0

Ich bin mir nicht sicher, was Sie meinen. Ich bin irgendwie neu in der Verwendung von Spring Beans, um eine Klasse zu instanziieren. Der SecurityService ist ein Jar, den ich in mein Projekt importiere und versuche, mit einer Bean darauf zuzugreifen. Wo sollte ich den Konstruktor hinzufügen? – Karson074

Verwandte Themen