Ошибка доступа к файлу с помощью программы Spring Batch. Перепробовал всевозможную ошибку - PullRequest
0 голосов
/ 08 апреля 2019

Я сталкиваюсь с ошибкой при доступе к файлу с помощью программы Spring Batch

Пробовал всеми возможными способами, но не работал. Добавлен и удален файл: в пути используются как "\\", так и "/". Никто не работал. Искал в гугле, безрезультатно.

Я снова и снова пытался скомпилировать, выполнить очистку и сборку, но появляется та же ошибка. Даже перезапуск системы.

Я использую чистые бобы.

Я не использую pom.xml или какой-либо инструмент зависимостей

package springbt;
import org.springframework.batch.core.Job;

import org.springframework.batch.core.JobExecution;
import org.springframework.batch.core.JobParameters;
import org.springframework.batch.core.JobParametersBuilder;
import org.springframework.batch.core.launch.JobLauncher;
import org.springframework.beans.BeansException;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class SpringBT {
    public static void main(String[] args) throws BeansException {

String springConfig =  "file:D:/SampleProg/SpringBatch1/SpringBT/src/beanFiles/job-batch-demo.xml"; 

ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(springConfig);

        JobLauncher jobLauncher = (JobLauncher) context.getBean("jobLauncher");
        Job job = (Job) context.getBean("DemoJobXMLWriter");

        JobParameters jobParameters = new JobParametersBuilder().addLong("time", System.currentTimeMillis())
                .toJobParameters();

        try {

            JobExecution execution = jobLauncher.run(job, jobParameters);
            System.out.println("Exit Status : " + execution.getStatus());

        } catch (Exception e) {
            e.printStackTrace();
        }

        System.out.println("Done");
        context.close();
    }
}

job-batch-demo.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:batch="http://www.springframework.org/schema/batch" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/batch
        http://www.springframework.org/schema/batch/spring-batch-3.0.xsd
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">



    <import resource="D:\\SampleProg\\SpringBatch1\\SpringBT\\src\\beanFiles\\context.xml" />
    <import resource="D:\\SampleProg\\SpringBatch1\\SpringBT\\src\\beanFiles\\database.xml" />

    <bean id="report" class="D:/SampleProg/SpringBatch1/SpringBT/src/springbt/Report" scope="prototype" />

    <bean id="itemProcessor" class="D:/SampleProg/SpringBatch1/SpringBT/src/springbt/CustomItemProcessor" />

    <batch:job id="DemoJobXMLWriter">
        <batch:step id="step1">
            <batch:tasklet>
                <batch:chunk reader="csvFileItemReader" writer="xmlItemWriter"
                    processor="itemProcessor" commit-interval="10">
                </batch:chunk>
            </batch:tasklet>
        </batch:step>
    </batch:job>

    <bean id="csvFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">

        <property name="resource" value="C:/Users/nitish.kumar/Desktop/csvs/SpringBatchInputCsv/report.csv" />

        <property name="lineMapper">
            <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
                <property name="lineTokenizer">
                    <bean
                        class="org.springframework.batch.item.file.transform.DelimitedLineTokenizer">
                        <property name="names" value="id,firstname,lastname,dob" />
                    </bean>
                </property>
                <property name="fieldSetMapper">
                    <bean class="D:/SampleProg/SpringBatch1/SpringBT/src/springbtReportFieldSetMapper" />

                    <!-- if no data type conversion, use BeanWrapperFieldSetMapper to map 
                        by name <bean class="org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper"> 
                        <property name="prototypeBeanName" value="report" /> </bean> -->
                </property>
            </bean>
        </property>

    </bean>

    <bean id="xmlItemWriter" class="org.springframework.batch.item.xml.StaxEventItemWriter">
        <property name="resource" value="file:xml/outputs/report.xml" />
        <property name="marshaller" ref="reportMarshaller" />
        <property name="rootTagName" value="report" />
    </bean>

    <bean id="reportMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="classesToBeBound">
            <list>
                <value>D:/SampleProg/SpringBatch1/SpringBT/src/springbt/Report</value>
            </list>
        </property>
    </bean>

</beans>

Вывод: -

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from URL [file:D:/SampleProg/SpringBatch1/SpringBT/src/beanFiles/job-batch-demo.xml]; nested exception is java.lang.IllegalArgumentException
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:412)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:243)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:127)
    at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions(AbstractXmlApplicationContext.java:93)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:131)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:522)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:436)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    at springbt.SpringBT.main(SpringBT.java:15)
Caused by: java.lang.IllegalArgumentException
    at sun.net.www.ParseUtil.decode(ParseUtil.java:202)
    at sun.net.www.protocol.file.Handler.openConnection(Handler.java:82)
    at sun.net.www.protocol.file.Handler.openConnection(Handler.java:72)
    at java.net.URL.openConnection(URL.java:971)
    at org.springframework.core.io.UrlResource.getInputStream(UrlResource.java:121)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:328)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:302)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:174)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:209)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:260)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseDefaultElement(DefaultBeanDefinitionDocumentReader.java:196)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:181)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:140)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:111)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:493)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
    ... 14 more
C:\Users\nitish.kumar\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 1 second)

1 Ответ

0 голосов
/ 08 апреля 2019

Следующие строки неверны:

<bean id="report" class="D:/SampleProg/SpringBatch1/SpringBT/src/springbt/Report" scope="prototype" />

<bean id="itemProcessor" class="D:/SampleProg/SpringBatch1/SpringBT/src/springbt/CustomItemProcessor" />

Значением атрибута class должно быть полное имя класса. Из вашего конфига, я думаю, ваши классы находятся в пакете springbt, так что это будет что-то вроде:

<bean id="report" class="springbt.Report" scope="prototype" />

<bean id="itemProcessor" class="springbt.CustomItemProcessor" />

То же самое для конфигурации маршаллера Jaxb:

<bean id="reportMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            <value>D:/SampleProg/SpringBatch1/SpringBT/src/springbt/Report</value>
        </list>
    </property>
</bean>

Что должно быть:

<bean id="reportMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
    <property name="classesToBeBound">
        <list>
            <value>springbt.Report</value>
        </list>
    </property>
</bean>

Наконец, я не уверен, что следующее верно, так как я не могу запустить ваш пример:

<import resource="D:\\SampleProg\\SpringBatch1\\SpringBT\\src\\beanFiles\\context.xml" />
<import resource="D:\\SampleProg\\SpringBatch1\\SpringBT\\src\\beanFiles\\database.xml" />

Я думаю, что это должно быть похоже на другой импорт в вашей конфигурации, что-то вроде:

<import resource="D:/SampleProg/SpringBatch1/SpringBT/src/beanFiles/context.xml" />
<import resource="D:/SampleProg/SpringBatch1/SpringBT/src/beanFiles/database.xml" />

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...