1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.batch.item.adapter;
18
19 import java.util.Arrays;
20 import java.util.List;
21
22 import org.springframework.batch.item.ItemWriter;
23 import org.springframework.beans.BeanWrapper;
24 import org.springframework.beans.BeanWrapperImpl;
25 import org.springframework.util.Assert;
26
27
28
29
30
31
32
33
34
35 public class PropertyExtractingDelegatingItemWriter<T> extends AbstractMethodInvokingDelegator<T> implements
36 ItemWriter<T> {
37
38 private String[] fieldsUsedAsTargetMethodArguments;
39
40
41
42
43
44
45 @Override
46 public void write(List<? extends T> items) throws Exception {
47 for (T item : items) {
48
49
50 BeanWrapper beanWrapper = new BeanWrapperImpl(item);
51
52 Object[] methodArguments = new Object[fieldsUsedAsTargetMethodArguments.length];
53 for (int i = 0; i < fieldsUsedAsTargetMethodArguments.length; i++) {
54 methodArguments[i] = beanWrapper.getPropertyValue(fieldsUsedAsTargetMethodArguments[i]);
55 }
56
57 invokeDelegateMethodWithArguments(methodArguments);
58
59 }
60 }
61
62 @Override
63 public void afterPropertiesSet() throws Exception {
64 super.afterPropertiesSet();
65 Assert.notEmpty(fieldsUsedAsTargetMethodArguments);
66 }
67
68
69
70
71
72
73 public void setFieldsUsedAsTargetMethodArguments(String[] fieldsUsedAsMethodArguments) {
74 this.fieldsUsedAsTargetMethodArguments = Arrays.asList(fieldsUsedAsMethodArguments).toArray(
75 new String[fieldsUsedAsMethodArguments.length]);
76 }
77
78 }