Back Forum Reply New

Problem using Late binding of Step Attributes

mons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org..util.Assert;

public class PromoteDirectoryLocker {

public static final String NULL_PROMOTE_DIRECTORY = quot;The provided promoteDirectory is nullquot;;
public static final String ILLEGAL_OVERRIDE_TIMEOUT = quot;The override timeout has to be a positive value : quot;;
public static final String ILLEGAL_POLLING_INTERVAL = quot;The polling interval has to be a positive value : quot;;
public static final String ILLEGAL_PROMOTE_DIRECTORY_PARAMETER = quot;The provided promote directory is not a directory : quot;;
/*** The directory where the models will be promote too.*/
private File promoteDirectory;
/*** The interval after which we will try to create the lock directory if the* previous attempt failed.*/
private long pollingInterval;
/*** The interval after which we override the process that holds a lock on the* directory but hasn't updated its status and assume the process failed.*/
private long overrideTimeOut;

private static Log log = LogFactory.getLog(dexia.geop.promote.PromoteDirectoryLocker.class);

public PromoteDirectoryLocker() {
super();
}

public PromoteDirectoryLocker(File promoteDirectory, long pollingInterval,
long overrideTimeOut) {
super();
Assert.notNull(promoteDirectory,NULL_PROMOTE_DIRECTORY);
if(promoteDirectory.exists())
{
Assert.isTrue(promoteDirectory.isDirectory(),ILLEGAL_PROMOTE_DIRECTORY_PARAMETER+promoteDirectory);
}
Assert.isTrue(pollingInterval gt; 0,ILLEGAL_POLLING_INTERVAL+pollingInterval);
Assert.isTrue(overrideTimeOut gt; 0,ILLEGAL_OVERRIDE_TIMEOUT+overrideTimeOut);
this.promoteDirectory = promoteDirectory;
this.pollingInterval = pollingInterval;
this.overrideTimeOut = overrideTimeOut;
}

public void setPromoteDirectory(File promoteDirectory) {
Assert.notNull(promoteDirectory,NULL_PROMOTE_DIRECTORY);
if(promoteDirectory.exists())
{
Assert.isTrue(promoteDirectory.isDirectory(),ILLEGAL_PROMOTE_DIRECTORY_PARAMETER+promoteDirectory);
}
this.promoteDirectory = promoteDirectory;
}

public void setPollingInterval(long pollingInterval) {
Assert.isTrue(pollingInterval gt; 0,ILLEGAL_POLLING_INTERVAL+pollingInterval);
this.pollingInterval = pollingInterval;
}

public void setOverrideTimeOut(long overrideTimeOut) {
Assert.isTrue(overrideTimeOut gt; 0,ILLEGAL_OVERRIDE_TIMEOUT+overrideTimeOut);
this.overrideTimeOut = overrideTimeOut;
}

public void lockPromoteDirectory()
{
boolean lockAcquired = false;
while(!lockAcquired)
{
this.checkOverrideTimeOut();
log.info(quot;Trying to acquire the lock.quot;);
lockAcquired = this.promoteDirectory.mkdir();
if(!lockAcquired)
{
try {
log.info(quot;Failed to acquire a lock, waiting for quot;+this.pollingInterval+ quot; milliseconds to retryquot;);
Thread.sleep(this.pollingInterval);
} catch (InterruptedException e) {
log.info(e);
}
}
else
{
log.info(quot;The lock has been acquired.quot;);
}
}
}

public void checkOverrideTimeOut()
{
log.info(quot;Checking if the lock has expired.quot;);
long lockExpiryTime = System.currentTimeMillis() - this.overrideTimeOut;
if(FileUtils.isFileOlder(this.promoteDirectory, lockExpiryTime))
{
log.info(quot;The lock has expired, removing the lock.quot;);
try
{
FileUtils.deleteDirectory(this.promoteDirectory);
}
catch(IOException e)
{
log.error(e);
}
}
}
}
This code creates a directory used as a lock and if it can't create the directory it waits an retries after some times it just deletes the directory.

I tried running it with Spring Batch using the following xml : Code:
lt;job id=quot;SampleJobquot; restartable=quot;falsequot;gt;
lt;step id=quot;stepquot;gt;
lt;tasklet ref=quot;SampleTaskletquot; /gt;
lt;/stepgt;
lt;/jobgt;

lt;beans:bean id=quot;SampleTaskletquot; scope=quot;stepquot;
class=quot;org..batch.core.step.tasklet.MethodInvokingTaskletAdapterquot;gt;
lt;beans:property name=quot;targetObjectquot; ref=quot;promoteDirectoryLockerquot;/gt;
lt;beans:property name=quot;targetMethodquot; value=quot;lockPromoteDirectoryquot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;promoteDirectoryLockerquot; class=quot;dexia.geop.promote.PromoteDirectoryLockerquot;gt;
lt;beans:property name=quot;pollingIntervalquot; value=quot;1000quot;/gt;
lt;beans:property name=quot;overrideTimeOutquot; value=quot;60000quot;/gt;
lt;beans:property name=quot;promoteDirectoryquot; value=quot;#{jobParameters[input.file.name]}quot;/gt;
lt;/beans:beangt;
Then using the org..batch.core.launch.support.Comm  andLineJobRunner with the arguments : PromoteDirectoryLocker.xml SampleJob input.file.name=C:\

Instead of binding the #{jobParameters[input.file.name]} to C:\ it just creates a directory called #{jobParameters[input.file.name]}.
What am I doing wrong here ?

Add scope=quot;stepquot; as an attribute of the promoteDirectoryLocker bean.  See sp...l#late-binding.

Adding this scope attributes to this POJO causes the following error:Code:
2009-05-18 16:18:35,851 [main] DEBUG - Truncating long message before update of StepExecution, original message is: org..beans.factory.BeanCreationException: Error creating bean with name 'lazyBindingProxy.SampleTasklet#sysinit' defined in class path resource [PromoteDirectoryLocker.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: target class must declare a method with matching name and parameter types
at org..beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
at org..beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at org..beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at org..beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at org..beans.factory.support.AbstractBeanFactory$2.getObject(AbstractBeanFactory.java:302)
at org..batch.core.scope.StepScope.get(StepScope.java:120)
at org..beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org..beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at org..beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at org..batch.core.scope.util.PlaceholderTargetSource.getTarget(PlaceholderTargetSource.java:205)
at org..aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:184)
at $Proxy0.execute(Unknown Source)
at org..batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:264)
at org..batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:67)
at org..batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:352)
at org..batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:212)
at org..batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:143)
at org..batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:239)
at org..batch.core.step.AbstractStep.execute(AbstractStep.java:197)
at org..batch.core.job.AbstractJob.handleStep(AbstractJob.java:348)
at org..batch.core.job.flow.FlowJob.access$100(FlowJob.java:43)
at org..batch.core.job.flow.FlowJob$JobFlowExecutor.executeStep(FlowJob.java:137)
at org..batch.core.job.flow.support.state.StepState.handle(StepState.java:60)
at org..batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:144)
at org..batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:124)
at org..batch.core.job.flow.FlowJob.doExecute(FlowJob.java:105)
at org..batch.core.job.AbstractJob.execute(AbstractJob.java:250)
at org..batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:110)
at org..core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:49)
at org..batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:105)
at org..batch.core.launch.support.CommandLineJobRunner.start(CommandLineJobRunner.java:207)
at org..batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:254)
Caused by: java.lang.IllegalStateException: target class must declare a method with matching name and parameter types
at org..util.Assert.state(Assert.java:384)
at org..batch.item.adapter.AbstractMethodInvokingDelegator.afterPropertiesSet(AbstractMethodInvokingDelegator.java:125)
at org..beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1369)
at org..beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
... 32 moreCan your post your current XML job file?  I see that your method invoking tasklet has scope = step on it as well, which might be the source of your issue, but it depends upon how you've modified it.

The xml from the last post was :

Code:
lt;job id=quot;SampleJobquot; restartable=quot;falsequot;gt;
lt;step id=quot;stepquot;gt;
lt;tasklet ref=quot;SampleTaskletquot; /gt;
lt;/stepgt;
lt;/jobgt;

lt;beans:bean id=quot;SampleTaskletquot; scope=quot;stepquot;
class=quot;org..batch.core.step.tasklet.MethodInvokingTaskletAdapterquot;gt;
lt;beans:property name=quot;targetObjectquot; ref=quot;promoteDirectoryLockerquot;/gt;
lt;beans:property name=quot;targetMethodquot; value=quot;lockPromoteDirectoryquot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;promoteDirectoryLockerquot; scope=quot;stepquot; class=quot;dexia.geop.promote.PromoteDirectoryLockerquot;gt;
lt;beans:property name=quot;pollingIntervalquot; value=quot;1000quot;/gt;
lt;beans:property name=quot;overrideTimeOutquot; value=quot;60000quot;/gt;
lt;beans:property name=quot;promoteDirectoryquot; value=quot;#{jobParameters[input.file.name]}quot;/gt;
lt;/beans:beangt;
The following xml : Code:
lt;job id=quot;SampleJobquot; restartable=quot;falsequot;gt;
lt;step id=quot;stepquot;gt;
lt;tasklet ref=quot;SampleTaskletquot; /gt;
lt;/stepgt;
lt;/jobgt;

lt;beans:bean id=quot;SampleTaskletquot;
class=quot;org..batch.core.step.tasklet.MethodInvokingTaskletAdapterquot;gt;
lt;beans:property name=quot;targetObjectquot; ref=quot;promoteDirectoryLockerquot;/gt;
lt;beans:property name=quot;targetMethodquot; value=quot;lockPromoteDirectoryquot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;promoteDirectoryLockerquot; scope=quot;stepquot; class=quot;dexia.geop.promote.PromoteDirectoryLockerquot;gt;
lt;beans:property name=quot;pollingIntervalquot; value=quot;1000quot;/gt;
lt;beans:property name=quot;overrideTimeOutquot; value=quot;60000quot;/gt;
lt;beans:property name=quot;promoteDirectoryquot; value=quot;#{jobParameters[input.file.name]}quot;/gt;
lt;/beans:beangt;
Generates the following stacktrace : Code:
org..beans.factory.BeanCreationException: Error creating bean with name 'step': Cannot resolve reference to bean 'SampleTasklet' while setting bean property 'tasklet'; nested exception is org..beans.factory.BeanCreationException: Error creating bean with name 'SampleTasklet' defined in class path resource [PromoteDirectoryLocker.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: target class must declare a method with matching name and parameter typesLooking at that again, are you sure the method name is correct?  Also, you don't need the scope=step on your adaptor, just the class that needs to use late binding.

The method name is correct.
As I stated in my first post, everythings works like it should but if fails to replace #{jobParameters[input.file.name]} with the actual directory.

When I add the step to POJO an exception is thrown regardless of whether or not there is a scope on the adapter.

I have created a very basic example illustrating my problem :

The Java code : Code:

public class PropertyPlaceholderTest {

private String placeHolder;

public String getPlaceHolder() {
return placeHolder;
}

public void setPlaceHolder(String placeHolder) {
this.placeHolder = placeHolder;
}

public void doSomething()
{
System.out.println(placeHolder);
}

}
I have tried running it with the following three configuration file : Code:
lt;beans:beans xmlns=quot;schema/batchquot;
xmlns:beans=quot;schema/beansquot; xmlns:aop=quot;schema/aopquot;
xmlns:xsi=quot;2001/XMLSchema-instancequot;
xsi:schemaLocation=quot;          schema/beans           schema/beans/spring-beans-2.0.xsd          schema/aop          schema/aop/spring-aop.xsd          schema/batch           schema/batch/spring-batch-2.0.xsdquot;gt;

lt;job id=quot;SampleJobquot; restartable=quot;falsequot;gt;
lt;step id=quot;stepquot;gt;
lt;tasklet ref=quot;SampleTaskletquot; /gt;
lt;/stepgt;
lt;/jobgt;

lt;beans:bean id=quot;SampleTaskletquot;
class=quot;org..batch.core.step.tasklet.MethodInvokingTaskletAdapterquot;gt;
lt;beans:property name=quot;targetObjectquot; ref=quot;propertyPlaceholderTestquot; /gt;
lt;beans:property name=quot;targetMethodquot; value=quot;doSomethingquot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;propertyPlaceholderTestquot; class=quotropertyPlaceholderTestquot;gt;
lt;beans:property name=quot;placeHolderquot; value=quot;#{jobParameters[placeHolder]}quot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;jobRepositoryquot;
class=quot;org..batch.core.repository.support.SimpleJobRepositoryquot;gt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapJobInstanceDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapJobExecutionDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapStepExecutionDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapExecutionContextDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;/beans:beangt;

lt;beans:bean id=quot;jobLauncherquot;
class=quot;org..batch.core.launch.support.SimpleJobLauncherquot;gt;
lt;beans:property name=quot;jobRepositoryquot; ref=quot;jobRepositoryquot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;dataSourcequot;
class=quot;org..jdbc.datasource.DriverManagerDataSourcequot;gt;
lt;beans:property name=quot;driverClassNamequot; value=quot;org.hsqldb.jdbcDriverquot; /gt;
lt;beans:property name=quot;uclquot; value=quot;jdbc:hsqldb:mem:testdbquot; /gt;
lt;/beans:beangt;
lt;beans:bean id=quot;transactionManagerquot;
class=quot;org..jdbc.datasource.DataSourceTransactionManagerquot;gt;
lt;beans:property name=quot;dataSourcequot; ref=quot;dataSourcequot; /gt;
lt;/beans:beangt;lt;/beans:beansgt;Code:
lt;beans:beans xmlns=quot;schema/batchquot;
xmlns:beans=quot;schema/beansquot; xmlns:aop=quot;schema/aopquot;
xmlns:xsi=quot;2001/XMLSchema-instancequot;
xsi:schemaLocation=quot;          schema/beans           schema/beans/spring-beans-2.0.xsd          schema/aop          schema/aop/spring-aop.xsd          schema/batch           schema/batch/spring-batch-2.0.xsdquot;gt;

lt;job id=quot;SampleJobquot; restartable=quot;falsequot;gt;
lt;step id=quot;stepquot;gt;
lt;tasklet ref=quot;SampleTaskletquot; /gt;
lt;/stepgt;
lt;/jobgt;

lt;beans:bean id=quot;SampleTaskletquot;
class=quot;org..batch.core.step.tasklet.MethodInvokingTaskletAdapterquot;gt;
lt;beans:property name=quot;targetObjectquot; ref=quot;propertyPlaceholderTestquot; /gt;
lt;beans:property name=quot;targetMethodquot; value=quot;doSomethingquot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;propertyPlaceholderTestquot; class=quotropertyPlaceholderTestquot; scope=quot;stepquot;gt;
lt;beans:property name=quot;placeHolderquot; value=quot;#{jobParameters[placeHolder]}quot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;jobRepositoryquot;
class=quot;org..batch.core.repository.support.SimpleJobRepositoryquot;gt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapJobInstanceDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapJobExecutionDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapStepExecutionDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapExecutionContextDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;/beans:beangt;

lt;beans:bean id=quot;jobLauncherquot;
class=quot;org..batch.core.launch.support.SimpleJobLauncherquot;gt;
lt;beans:property name=quot;jobRepositoryquot; ref=quot;jobRepositoryquot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;dataSourcequot;
class=quot;org..jdbc.datasource.DriverManagerDataSourcequot;gt;
lt;beans:property name=quot;driverClassNamequot; value=quot;org.hsqldb.jdbcDriverquot; /gt;
lt;beans:property name=quot;uclquot; value=quot;jdbc:hsqldb:mem:testdbquot; /gt;
lt;/beans:beangt;
lt;beans:bean id=quot;transactionManagerquot;
class=quot;org..jdbc.datasource.DataSourceTransactionManagerquot;gt;
lt;beans:property name=quot;dataSourcequot; ref=quot;dataSourcequot; /gt;
lt;/beans:beangt;lt;/beans:beansgt;
and Code:
lt;beans:beans xmlns=quot;schema/batchquot;
xmlns:beans=quot;schema/beansquot; xmlns:aop=quot;schema/aopquot;
xmlns:xsi=quot;2001/XMLSchema-instancequot;
xsi:schemaLocation=quot;          schema/beans           schema/beans/spring-beans-2.0.xsd          schema/aop          schema/aop/spring-aop.xsd          schema/batch           schema/batch/spring-batch-2.0.xsdquot;gt;

lt;job id=quot;SampleJobquot; restartable=quot;falsequot;gt;
lt;step id=quot;stepquot;gt;
lt;tasklet ref=quot;SampleTaskletquot; /gt;
lt;/stepgt;
lt;/jobgt;

lt;beans:bean id=quot;SampleTaskletquot;
class=quot;org..batch.core.step.tasklet.MethodInvokingTaskletAdapterquot; scope=quot;stepquot;gt;
lt;beans:property name=quot;targetObjectquot; ref=quot;propertyPlaceholderTestquot; /gt;
lt;beans:property name=quot;targetMethodquot; value=quot;doSomethingquot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;propertyPlaceholderTestquot; class=quotropertyPlaceholderTestquot;gt;
lt;beans:property name=quot;placeHolderquot; value=quot;#{jobParameters[placeHolder]}quot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;jobRepositoryquot;
class=quot;org..batch.core.repository.support.SimpleJobRepositoryquot;gt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapJobInstanceDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapJobExecutionDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapStepExecutionDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;beans:constructor-arggt;
lt;beans:bean
class=quot;org..batch.core.repository.dao.MapExecutionContextDaoquot; /gt;
lt;/beans:constructor-arggt;
lt;/beans:beangt;

lt;beans:bean id=quot;jobLauncherquot;
class=quot;org..batch.core.launch.support.SimpleJobLauncherquot;gt;
lt;beans:property name=quot;jobRepositoryquot; ref=quot;jobRepositoryquot; /gt;
lt;/beans:beangt;

lt;beans:bean id=quot;dataSourcequot;
class=quot;org..jdbc.datasource.DriverManagerDataSourcequot;gt;
lt;beans:property name=quot;driverClassNamequot; value=quot;org.hsqldb.jdbcDriverquot; /gt;
lt;beans:property name=quot;uclquot; value=quot;jdbc:hsqldb:mem:testdbquot; /gt;
lt;/beans:beangt;
lt;beans:bean id=quot;transactionManagerquot;
class=quot;org..jdbc.datasource.DataSourceTransactionManagerquot;gt;
lt;beans:property name=quot;dataSourcequot; ref=quot;dataSourcequot; /gt;
lt;/beans:beangt;lt;/beans:beansgt;
I run the following class : org..batch.core.launch.support.Comm  andLineJobRunner with the following program arguments :
placeholder.xml SampleJob placeHolder=Test

I presume you can recreate my problem with this additional information.
Why isn't this working? Is this normal behaviour or should I create a Jira?

Can you try it with a 2.0.1 snapshot?  It should work there already I think.  Or use a concrete Tasklet instead of the POJO adapter.

.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processAttributes(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.emptyElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at org..beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:75)
at org..beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:396)
... 15 more
Did the xsd change between 2.0.0 and 2.0.1 ?
¥
Back Forum Reply New