由NullPointerException引起的BeanInstantiationException引起的BeanCreationException:name

时间:2016-03-21 19:42:47

标签: java xml spring nullpointerexception

我目前正在尝试测试一个Web应用程序,但每当我尝试启动Websphere 8.5时,我就会一直收到NullPointerException,这会导致BeanInstantiationException和BeanCreationException。我尝试过使用注释并删除mvc-dispatcher-servlet.xml文件中的bean,但是同样的错误仍然存​​在但是使用了不同的bean。我不确定我需要改变什么才能让它运转起来。

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: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(将启动bean)

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

错误

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

SecurityService

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

SecurityClient bean来自一个名为security-client-0.jar的jar。任何建议将不胜感激

2 个答案:

答案 0 :(得分:0)

你错过<?xml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">#3F51B5</color> <color name="colorPrimaryDark">#303F9F</color> <color name="colorAccent">#FF4081</color> </resources> MainController.java注入每个bean所需的private RacfGroupData racfGroup; {/ 1}}。

使用此

Autowired

重构@Autowired private SessionBean session; @Autowired private RacfGroupData racfGroup; 这行

SecurityService.class

用这个

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

答案 1 :(得分:0)

我的anwser可能不再相关(已经晚了4年),但是仍然可以提供帮助。

有同样的问题。检查引发异常的stacktrace。 在我的情况下,Feign Builder使用URL作为名称。

URL为空,名称也为空,因此为例外。

您的方法调用System.getProperty("securityServicesBaseUrl")必须导致一个空字符串。