spring batch exception Cannot construct java.util.Map$Entry

匿名 (未验证) 提交于 2019-12-03 08:57:35

问题:

We are facing following exception while executing spring batch job from command line. Spring Batch Version - 3.0.2.RELEASE Spring Version - 4.0.0.RELEASE xStream version - 1.4.7 Data Base - mysql (I am connecting to new DB schema.) While executing a job using following command, I am getting below exception...

    java %JAVA_OPTS% org.springframework.batch.core.launch.support.CommandLineJobRunner config/spring-config.xml partitionJdbcJob      Exception     ----------      INFO: Loaded JDBC driver: com.mysql.jdbc.Driver     Feb 20, 2015 3:22:28 PM org.springframework.batch.core.launch.support.SimpleJobLauncher afterPropertiesSet     INFO: No TaskExecutor has been set, defaulting to synchronous executor.     Feb 20, 2015 3:22:29 PM org.springframework.batch.core.launch.support.SimpleJobLauncher run     INFO: Job: [FlowJob: [name=partitionJdbcJob]] launched with the following parameters: [{}]     Feb 20, 2015 3:22:29 PM org.springframework.batch.core.job.AbstractJob execute      SEVERE: Encountered fatal error executing job     org.springframework.batch.core.JobExecutionException: Flow execution ended unexpectedly             at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:140)             at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:304)             at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135)             at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)             at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:128)             at org.springframework.batch.core.launch.support.CommandLineJobRunner.start(CommandLineJobRunner.java:362)             at org.springframework.batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:590)     Caused by: org.springframework.batch.core.job.flow.FlowExecutionException: Ended flow=partitionJdbcJob at state=partitionJdbcJob.step with exception             at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:174)             at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:144)             at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:134)             ... 6 more     Caused by: com.thoughtworks.xstream.converters.ConversionException: Cannot construct java.util.Map$Entry : java.util.Map$Entry : Cannot construct java.util.Map$     Entry : java.util.Map$Entry      ---- Debugging information ----     message             : Cannot construct java.util.Map$Entry : java.util.Map$Entry     cause-exception     : com.thoughtworks.xstream.converters.reflection.ObjectAccessException     cause-message       : Cannot construct java.util.Map$Entry : java.util.Map$Entry     class               : java.util.Map$Entry     required-type       : java.util.Map$Entry     converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter     path                : /map/map/entry     line number         : -1     class[1]            : java.util.HashMap     converter-type[1]   : com.thoughtworks.xstream.converters.collections.MapConverter     version             : 1.4.7     -------------------------------             at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)             at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)             at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)             at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)             at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71)             at com.thoughtworks.xstream.converters.collections.MapConverter.putCurrentEntryIntoMap(MapConverter.java:106)             at com.thoughtworks.xstream.converters.collections.MapConverter.populateMap(MapConverter.java:98)             at com.thoughtworks.xstream.converters.collections.MapConverter.populateMap(MapConverter.java:92)             at com.thoughtworks.xstream.converters.collections.MapConverter.unmarshal(MapConverter.java:87)             at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)             at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)             at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)             at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)             at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)             at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)             at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1185)             at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1169)             at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1040)             at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1031)             at org.springframework.batch.core.repository.dao.XStreamExecutionContextStringSerializer.deserialize(XStreamExecutionContextStringSerializer.java:112)             at org.springframework.batch.core.repository.dao.XStreamExecutionContextStringSerializer.deserialize(XStreamExecutionContextStringSerializer.java:45)             at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao$ExecutionContextRowMapper.mapRow(JdbcExecutionContextDao.java:322)             at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao$ExecutionContextRowMapper.mapRow(JdbcExecutionContextDao.java:309)             at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:93)             at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60)             at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:706)             at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:642)             at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:693)             at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:725)             at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:735)             at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:790)             at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao.getExecutionContext(JdbcExecutionContextDao.java:127)             at org.springframework.batch.core.repository.support.SimpleJobRepository.getLastStepExecution(SimpleJobRepository.java:238)             at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)             at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)             at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)             at java.lang.reflect.Method.invoke(Unknown Source)             at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)             at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)             at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)             at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)             at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)             at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)             at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)             at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)             at $Proxy7.getLastStepExecution(Unknown Source)             at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:115)             at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64)             at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:67)             at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:165)             ... 8 more     Caused by: com.thoughtworks.xstream.converters.reflection.ObjectAccessException: Cannot construct java.util.Map$Entry : java.util.Map$Entry             at com.thoughtworks.xstream.converters.reflection.SunLimitedUnsafeReflectionProvider.newInstance(SunLimitedUnsafeReflectionProvider.java:80)             at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.instantiateNewInstance(AbstractReflectionConverter.java:553)             at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:256)             at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)             ... 57 more     Caused by: java.lang.InstantiationException: java.util.Map$Entry             at sun.misc.Unsafe.allocateInstance(Native Method)             at com.thoughtworks.xstream.converters.reflection.SunLimitedUnsafeReflectionProvider.newInstance(SunLimitedUnsafeReflectionProvider.java:76)             ... 60 more Spring Config ---------------- <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"      xmlns:context="http://www.springframework.org/schema/context"     xmlns:task="http://www.springframework.org/schema/task"     xsi:schemaLocation="http://www.springframework.org/schema/beans                             http://www.springframework.org/schema/beans/spring-beans-4.0.xsd                             http://www.springframework.org/schema/context                             http://www.springframework.org/schema/context/spring-context-4.0.xsd                             http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd                             http://www.springframework.org/schema/task                              http://www.springframework.org/schema/task/spring-task-3.2.xsd">      <context:annotation-config />       <bean id="dataSource"         class="org.springframework.jdbc.datasource.DriverManagerDataSource">         <property name="driverClassName" value="com.mysql.jdbc.Driver" />         <property name="url" value="jdbc:mysql://localhost:3306/newspringbatch?useServerPrepStmts=false&amp;rewriteBatchedStatements=true" />         <property name="username" value="uid" />         <property name="password" value="pwd" />     </bean>      <bean id="transactionManager"         class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />      <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">         <constructor-arg ref="pooledDS" />     </bean>      <!-- DB Pooling -->     <bean id="pool" class="org.apache.commons.pool.impl.GenericObjectPool">         <property name="minEvictableIdleTimeMillis"><value>300000</value></property>         <property name="timeBetweenEvictionRunsMillis"><value>60000</value></property>     </bean>      <bean id="dsConnectionFactory" class="org.apache.commons.dbcp.DataSourceConnectionFactory">         <constructor-arg><ref bean="dataSource"/></constructor-arg>     </bean>      <bean id="poolableConnectionFactory" class="org.apache.commons.dbcp.PoolableConnectionFactory">         <constructor-arg index="0"><ref bean="dsConnectionFactory"/></constructor-arg>         <constructor-arg index="1"><ref bean="pool"/></constructor-arg>         <constructor-arg index="2"><null/></constructor-arg>         <constructor-arg index="3"><null/></constructor-arg>         <constructor-arg index="4"><value>false</value></constructor-arg>         <constructor-arg index="5"><value>true</value></constructor-arg>     </bean>      <bean id="pooledDS" class="org.apache.commons.dbcp.PoolingDataSource" depends-on="poolableConnectionFactory">         <constructor-arg><ref bean="pool"/></constructor-arg>     </bean>      <!-- stored job-meta in database -->     <bean id="batchDefaultSerializer" class="org.springframework.batch.core.repository.dao.DefaultExecutionContextSerializer" />       <bean id="jobRepository"         class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">         <property name="dataSource" ref="pooledDS" />         <property name="transactionManager" ref="transactionManager" />         <property name="databaseType" value="mysql" />        </bean>      <bean id="jobLauncher"         class="org.springframework.batch.core.launch.support.SimpleJobLauncher">         <property name="jobRepository" ref="jobRepository" />     </bean>      <bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller"></bean>      <bean id="userUnmarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller"></bean>      <job id="partitionJdbcJob" restartable="true" xmlns="http://www.springframework.org/schema/batch">           <step id="step" >             <partition step="createFiles" partitioner="partitioner">                 <handler grid-size="50" task-executor="taskExecutor" />             </partition>         </step>         <listeners>             <listener ref="jobDurationListener" />         </listeners>     </job>      <step id="createFiles" xmlns="http://www.springframework.org/schema/batch">         <tasklet>             <chunk reader="pagingItemReader" processor="filesItemProcessor"                 writer="filesItemWriter" commit-interval="200" />         </tasklet>     </step>      <!-- PagingItemReader will be used for big records only -->     <bean id="pagingItemReader" class="org.springframework.batch.item.database.JdbcPagingItemReader"         scope="step" autowire-candidate="false">         <property name="dataSource" ref="pooledDS" />         <property name="rowMapper" ref="reconRowMapper" />         <!-- Query Provider -->         <property name="queryProvider">             <bean                 class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">                 <property name="dataSource" ref="pooledDS" />                 <property name="fromClause" value="from sample" />                 <property name="selectClause" value="id,name" />                 <property name="sortKey" value="id" />              </bean>         </property>          <!-- Inject via the ExecutionContext in partitioner -->         <property name="parameterValues">             <map>                 <entry key="minId" value="#{stepExecutionContext[minValue]}" />                 <entry key="maxId" value="#{stepExecutionContext[maxValue]}" />             </map>         </property>     </bean>      <bean id="filesItemProcessor" class="com.batch.job.ResultProcessor" />      <bean id="filesItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter"         scope="step">         <property name="resource" value="#{stepExecutionContext[outputFile]}" />         <property name="shouldDeleteIfExists" value="true" />         <property name="lineAggregator">             <bean                 class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">                 <property name="delimiter" value="," />                 <property name="fieldExtractor">                     <bean                         class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">                         <property name="names" value="id,name" />                     </bean>                 </property>             </bean>         </property>     </bean> </beans>       Feb 20, 2015 3:22:29 PM org.springframework.batch.core.launch.support.SimpleJobLauncher run     INFO: Job: [FlowJob: [name=partitionJdbcJob]] completed with the following parameters: [{}] and the following status: [FAILED]     Feb 20, 2015 3:22:29 PM org.springframework.context.support.ClassPathXmlApplicationContext doClose     INFO: Closing org.springframework.context.support.ClassPathXmlApplicationContext     @d37d44: startup date [Fri Feb 20 15:22:27 IST 2015]; root of context hierarchy 

回答1:

Had same issue when running Spring Batch Job. At:

Set<JobExecution> runningJobExecutions = jobExplorer.findRunningJobExecutions(jobName); 

Solved by using jettison 1.1 instead of 1.3.2



回答2:

While changing the version of the Jettison jar got rid of the error for me as well, that didn't solve the underlying problem.

In my case the ultimate cause was having two steps with the same name. Once I fixed that, the reported exception went away.



回答3:

Error message though confusing points to duplicate jobs/steps. Creating unique jobs/steps helped fix the issue for me. No other change needed.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!