2017-04-06 82 views
-1

我已經將struts庫升級到最新版本2.5.10.1。錯誤InstantiatingNullHandler無法創建和/或將值設置回對象

當我試圖從JSP中設置一個對象時,出現以下錯誤。

ERROR InstantiatingNullHandler Could not create and/or set value back on to object 
org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'java.util.ArrayList' to required type 'java.util.List' for property 'userExtraInfoList'; nested exception is java.lang.IllegalStateException: Cannot convert value of type 'org.springframework.security.web.DefaultSecurityFilterChain' to required type 'com.***.user.UserExtraInfo' for property 'userExtraInfoList[0]': no matching editors or conversion strategy found 
    at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:605) 
    at org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:617) 
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:216) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1577) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1536) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1276) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:386) 
    at com.opensymphony.xwork2.spring.SpringObjectFactory.autoWireBean(SpringObjectFactory.java:215) 
    at com.opensymphony.xwork2.spring.SpringObjectFactory.buildBean(SpringObjectFactory.java:194) 
    at com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.createObject(InstantiatingNullHandler.java:149) 
    at com.opensymphony.xwork2.conversion.impl.InstantiatingNullHandler.nullPropertyValue(InstantiatingNullHandler.java:125) 
    at com.opensymphony.xwork2.ognl.OgnlNullHandlerWrapper.nullPropertyValue(OgnlNullHandlerWrapper.java:21) 
    at ognl.ASTProperty.getValueBody(ASTProperty.java:118) 
    at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) 
    at ognl.SimpleNode.getValue(SimpleNode.java:258) 
    at ognl.ASTChain.setValueBody(ASTChain.java:222) 
    at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220) 
    at ognl.SimpleNode.setValue(SimpleNode.java:301) 
    at ognl.Ognl.setValue(Ognl.java:710) 
    at com.opensymphony.xwork2.ognl.OgnlUtil$1.execute(OgnlUtil.java:295) 
    at com.opensymphony.xwork2.ognl.OgnlUtil$1.execute(OgnlUtil.java:287) 
    at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecute(OgnlUtil.java:382) 
    at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java:287) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:184) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:171) 
    at com.opensymphony.xwork2.ognl.OgnlValueStack.setParameter(OgnlValueStack.java:153) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.setParameters(ParametersInterceptor.java:206) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:125) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:133) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:192) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:69) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.DateTextFieldInterceptor.intercept(DateTextFieldInterceptor.java:115) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:88) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:246) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:99) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:139) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:174) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:120) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:171) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:195) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:193) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:564) 
    at org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:81) 
    at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:143) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) 
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:158) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:100) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:64) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) 
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:155) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) 
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) 
    at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) 
    at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) 
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:521) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1096) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:674) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.lang.IllegalStateException: Cannot convert value of type 'org.springframework.security.web.DefaultSecurityFilterChain' to required type 'com.***.user.UserExtraInfo' for property 'userExtraInfoList[0]': no matching editors or conversion strategy found 
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:306) 
    at org.springframework.beans.TypeConverterDelegate.convertToTypedCollection(TypeConverterDelegate.java:574) 
    at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:220) 
    at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:590) 
    ... 118 more 

我懷疑有一些庫不匹配。

我使用下面的支柱庫

struts2-config-browser-plugin-2.5.10.1.jar 
struts2-convention-plugin-2.5.10.1.jar 
struts2-core-2.5.10.1.jar 
struts2-json-plugin-2.5.10.1.jar 
struts2-junit-plugin-2.5.10.1.jar 
struts2-spring-plugin-2.5.10.1.jar 
struts2-tiles-plugin-2.5.10.1.jar 

春圖書館

spring-aop-4.3.7.RELEASE.jar 
spring-beans-4.3.7.RELEASE.jar 
spring-context-4.3.7.RELEASE.jar 
spring-context-support-4.3.7.RELEASE.jar 
spring-core-4.3.7.RELEASE.jar 
spring-expression-4.3.7.RELEASE.jar 
spring-jdbc-4.3.7.RELEASE.jar 
spring-orm-4.3.7.RELEASE.jar 
spring-security-config-4.2.2.RELEASE.jar 
spring-security-core-4.2.2.RELEASE.jar 
spring-security-ldap-4.2.2.RELEASE.jar 
spring-security-taglibs-4.2.2.RELEASE.jar 
spring-security-web-4.2.2.RELEASE.jar 
spring-test-4.3.7.RELEASE.jar 
spring-tx-4.3.7.RELEASE.jar 
spring-web-4.3.7.RELEASE.jar 
spring-webmvc-4.3.7.RELEASE.jar 

User.java

@Entity 
@Table(name = "UserInfo") 
public class User implements Serializable { 

    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name = "UserID") 
    private String userID; 

    @Column(name = "Password") 
    private String password; 

    @Column(name = "Department") 
    private String department; 

    @Transient 
    private String designation; 
    . 
    . 
    . 
    . 
    . 

    @Transient 
    private Role[] roleList; 


    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinColumn(name = "UserID", nullable = true, insertable = false, updatable = false) 
    private List<UserExtraInfo> userExtraInfoList; 

    . 
    . 
    Other Getter and setters 

    public List<UserExtraInfo> getUserExtraInfoList() { 
     return userExtraInfoList; 
    } 

    public void setUserExtraInfoList(List<UserExtraInfo> userExtraInfoList) { 
     this.userExtraInfoList = userExtraInfoList; 
    } 
} 

其實我不是從JSP設置任何vlaues到userExtraInfoList。

如果我刪除userExtraInfoList,那麼它可以工作,但它在後面的代碼中使用。你能幫忙解決這個問題嗎?

在JSP中我做下面的Ajax調用

function getReportingManagersList(){ 
    var department = $('#department').val(); 
    var designation = $('#designation').val(); 
    $.ajax({ 
     data:{'user.department':department,'user.designation':designation}, 
     url:'getReportingManagersList', 
     datatype:'json', 
     success:function(json, textStatus){ 
      . 
      . 
      . 
     }, 
     error: function(xhr, textStatus, errorThrown) { 
      alert('error while getting reporting manager list' + errorThrown); 
     } 
    }); 
} 

Action類

public class UserAction extends ActionSupport implements Preparable, ServletRequestAware, ServletResponseAware, ServletContextAware { 


    private static final Logger LOGGER = Logger.getLogger(UserAction.class); 

    private UserService userService; 
    private User user; 
    . 
    . 
    . 


    @Override 
    public void prepare() throws Exception { 
     super.prepare(); 
    } 



    public void getReportingManagersList() throws Exception { 
     LOGGER.info("get reporting manager list for department : " 
         + user.getDepartment() + " and designation : " 
         + user.getDesignation()); 
     try { 
      List<User> userList = userService.getUserList(user); 
      StringBuilder json = new StringBuilder("{"); 
      if (!userList.isEmpty()) { 
       int index = 1; 
       for (User user : userList) { 
        json.append("'"); 
        json.append(user.getUserID()); 
        json.append("':'"); 
        json.append(user.getUserName()); 
        json.append("'"); 
        if (index < userList.size()) { 
         json.append(","); 
        } 
        index++; 
       } 
      } 
      json.append("}"); 
      streamJsonToClient(json.toString().replaceAll("'", String.valueOf('"'))); 
     } catch (Exception e) { 
      LOGGER.error("Error", e); 
      throw (e); 
     } 
    } 

    public User getUser() { 
     return user; 
    } 

    public void setUser(User user) { 
     this.user = user; 
    } 
    . 
    . 
} 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> 
    <display-name>Application</display-name> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/applicationContext-hibernate.xml</param-value> 
    </context-param> 

    <filter> 
     <filter-name>MultipartFilter</filter-name> 
     <filter-class>org.springframework.web.multipart.support.MultipartFilter</filter-class> 
    </filter> 
    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>MultipartFilter</filter-name> 
     <servlet-name>/*</servlet-name> 
    </filter-mapping> 

    <filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
    </filter-mapping> 


    <filter> 
     <filter-name>struts</filter-name> 
     <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> 
    <init-param> 
     <param-name>actionPackages</param-name> 
     <param-value>/</param-value> 
    </init-param> 
    <init-param> 
     <param-name>listings</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    </filter> 

    <filter-mapping> 
     <filter-name>struts</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 



    <security-constraint> 
     <web-resource-collection> 
      <web-resource-name>Forbidden</web-resource-name> 
      <url-pattern>/*</url-pattern> 
      <http-method>PUT</http-method> 
      <http-method>DELETE</http-method> 
      <http-method>OPTIONS</http-method> 
      <http-method>TRACE</http-method> 
      <http-method>PATCH</http-method> 
      <http-method>CONNECT</http-method> 
     </web-resource-collection>  
     <auth-constraint /> 
    </security-constraint> 


    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener>  

    <listener> 
     <listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class> 
    </listener> 

    <session-config> 
     <session-timeout> 
     720 
     </session-timeout> 
     <cookie-config><http-only>true</http-only></cookie-config> 
    </session-config> 

    <welcome-file-list> 
     <welcome-file>jsp/forward.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 
+0

尋求調試幫助的問題(「爲什麼這個代碼不工作?」)必須包含所需的行爲,特定的問題或錯誤以及在問題本身中重現問題所需的最短代碼。沒有明確問題陳述的問題對其他讀者無益。請參閱:如何創建最小,完整和可驗證示例。 –

+0

我正在保存用戶操作,該操作因該例外而無法工作。 –

+0

發佈代碼你在做什麼。 –

回答

0

降級Spring框架的版本4.2.9.RELEASE後,問題已解決。