Today we have received the following exception when added Quartz scheduler to spring framework application context.
Pretty strange as it looks like, right?
Unable to instantiate Action, actions.LoginAction, defined for 'login' in namespace '/'Failed to convert property value of type [java.util.LinkedHashMap] to required type [java.util.Map] for property 'fieldErrors'; nested exception is java.lang.IllegalArgumentException: Cannot convert value of type [org.springframework.scheduling.quartz.SimpleTriggerBean] to required type [java.lang.String] for property 'fieldErrors[triggers][0]': no matching editors or conversion strategy found com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:307)
com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:388) com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:187) org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61) org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478) org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter.doFilter(StrutsExecuteFilter.java:88) com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129) com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77) org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter.doFilter(StrutsPrepareFilter.java:82)
The configuration for quartz schedullers were
<util:list id="triggers">
<bean class="org.springframework.scheduling.quartz.SimpleTriggerBean">
<property name="jobDetail">
<bean ...>
</property>
<property name="repeatInterval" value="60000"/>
<property name="volatility" value="false"/>
</bean>
</util:list>
<bean name="local-schedule-factory"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers" ref="triggers"/>
<property name="startupDelay" value="60"/>
</bean>
Note, the list is declared as separate bean.
Was changed to:
<bean name="local-schedule-factory" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"
autowire="no">
<property name="triggers">
<util:list id="triggers">
<bean class="org.springframework.scheduling.quartz.SimpleTriggerBean"
name="passwordRecoveryTriggerBean" autowire="no">
<property name="jobDetail">
<bean ...>
</property>
<property name="repeatInterval" value="60000"/>
<property name="volatility" value="false"/>
</bean>
</util:list>
</property>
<property name="startupDelay" value="60"/>
</bean>
And the problem was solved!
By sharing this we hope this could "save someone's a day" :-)