Spring Batch - comment convertir une Chaîne de caractères à partir d'un fichier à Jour?

Je suis en train de traiter un fichier CSV dans lequel certains de ces champs sont des dates au format "yyyy-MM-dd" - mais le lecteur ne parvient pas à convertir la Chaîne de caractères à partir du fichier CSV pour une Date dans ma classe de modèle.

L'erreur est:

org.springframework.la validation.BindException:
org.springframework.la validation.BeanPropertyBindingResult: 1 erreur
Champ d'erreur dans l'objet "cible" sur le champ, datetimeInactive': rejeté
valeur [2011-04-27]; codes
[typeMismatch.target.datetimeInactive,typeMismatch.datetimeInactive,typeMismatch.java.util.Date,typeMismatch];
arguments
[org.springframework.contexte.de soutien.DefaultMessageSourceResolvable:
codes [cible.datetimeInactive,datetimeInactive]; les arguments [];
message par défaut [datetimeInactive]]; défaut de message [impossible de
convertir la valeur de la propriété type " java.lang.Chaîne' de type
"java.util.Date " pour la propriété 'datetimeInactive'; nested exception est
java.lang.IllegalStateException: Impossible de convertir une valeur de type
[java.lang.String] de type [java.util.La Date] pour la propriété
'datetimeInactive": pas de correspondance des éditeurs ou à la conversion de la stratégie trouvé]

XML pour le lecteur:

http://code.google.com/p/springbatch-in-action/source/browse/trunk/sbia/ch07/src/test/resources/com/manning/sbia/ch07/test-batch-reader-context.xml?r=145

Dans mon XML fichiers de config j'ai le texte suivant haricots:

  <bean id="dateEditor" class="org.springframework.beans.propertyeditors.CustomDateEditor">
    <constructor-arg>
      <bean class="java.text.SimpleDateFormat">
        <constructor-arg value="yyyy-MM-dd" />
      </bean>
    </constructor-arg>
    <constructor-arg value="true" />
  </bean>

  <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
    <property name="customEditors">
      <map>
        <entry key="java.util.Date">
          <ref local="dateEditor" />
        </entry>
      </map>
    </property>
  </bean>

Mes questions sont:

  1. J'ai défini un CustomDateEditor dans mon contexte - alors, pourquoi ne pas le Printemps convertir la Chaîne en Date?
  2. J'ai lu qu'il y est une nouvelle façon de Printemps 3 (Converter ?) pour obtenir la conversion terminée. c'est à dire http://forum.springsource.org/showthread.php?108480-Register-TypeConverter-PropertyEditor-w-Spring-Batch -- cependant, je ne pouvais pas trouver un exemple de code dans le Printemps de la documentation du Lot. Pourriez-vous montrer ici comment le faire /me diriger vers un lien?

Mise à JOUR:

J'ai une réponse à la question n ° 2:

XML:

  <mvc:annotation-driven conversion-service="conversionService" />

  <bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="my.project.StringToDate">
                <!-- org.springframework.binding.convert.converters.StringToDate DEFAULT_PATTERN = "yyyy-MM-dd" -->
                <property name="pattern" value="yyyy-MM-dd" />
            </bean>
        </set>
    </property>
  </bean>

Convertisseur Personnalisé:

package my.project;

import java.util.Date;

import org.springframework.core.convert.converter.Converter;

public class StringToDate extends org.springframework.binding.convert.converters.StringToDate implements Converter<String, Date> {

    public Date convert(String source) {

        Date date = null;

        try {
            date = (Date) convertSourceToTargetClass(getPattern(), getTargetClass());
        } catch (Exception e) {

        }

        return date;
    }

}

Je suis toujours à la recherche d'une réponse à la question n ° 1. I. e., après avoir défini le convertisseur, je suis encore en train BindException au cours de la tâche. De ce fil du forum, il semble que mon code doit avoir effectué la conversion.

Trace de la pile est:

Caused by: org.springframework.validation.BindException: org.springframework.validation.BeanPropertyBindingResult: 2 errors
Field error in object 'target' on field 'datetimeInactive': rejected value [2011-04-27]; codes [typeMismatch.target.datetimeInactive,typeMismatch.datetimeInactive,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [target.datetimeInactive,datetimeInactive]; arguments []; default message [datetimeInactive]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'datetimeInactive'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'datetimeInactive': no matching editors or conversion strategy found]
Field error in object 'target' on field 'datetimeActive': rejected value [2011-04-27]; codes [typeMismatch.target.datetimeActive,typeMismatch.datetimeActive,typeMismatch.java.util.Date,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [target.datetimeActive,datetimeActive]; arguments []; default message [datetimeActive]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Date' for property 'datetimeActive'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [java.lang.String] to required type [java.util.Date] for property 'datetimeActive': no matching editors or conversion strategy found]
at org.springframework.batch.item.file.mapping.BeanWrapperFieldSetMapper.mapFieldSet(BeanWrapperFieldSetMapper.java:186)
at org.springframework.batch.item.file.mapping.DefaultLineMapper.mapLine(DefaultLineMapper.java:42)
at org.springframework.batch.item.file.FlatFileItemReader.doRead(FlatFileItemReader.java:179)
... 45 more

OriginalL'auteur rapt | 2012-01-30