BATCH-859: fixed failing tests
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* Copyright 2006-2007 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.batch.sample.domain.trade.internal;
|
||||
|
||||
import org.springframework.batch.item.ItemProcessor;
|
||||
import org.springframework.batch.item.validator.ValidationException;
|
||||
import org.springframework.batch.sample.domain.trade.Trade;
|
||||
|
||||
/**
|
||||
* Processes the Trade - throwing validation errors if necessary.
|
||||
*/
|
||||
public class TradeProcessor implements ItemProcessor<Trade, Trade> {
|
||||
|
||||
private int failure = -1;
|
||||
|
||||
private int index = 0;
|
||||
|
||||
private Trade failedItem = null;
|
||||
|
||||
/**
|
||||
* Public setter for the the index on which failure should occur.
|
||||
*
|
||||
* @param failure the failure to set
|
||||
*/
|
||||
public void setValidationFailure(int failure) {
|
||||
this.failure = failure;
|
||||
}
|
||||
|
||||
public Trade process(Trade item) throws Exception {
|
||||
if ((failedItem == null && index++ == failure) || (failedItem != null && failedItem.equals(item))) {
|
||||
failedItem = item;
|
||||
throw new ValidationException("Some bad data for " + failedItem);
|
||||
}
|
||||
return item;
|
||||
}
|
||||
}
|
||||
@@ -4,7 +4,6 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.batch.item.ItemWriter;
|
||||
import org.springframework.batch.item.validator.ValidationException;
|
||||
|
||||
/**
|
||||
* Remembers all items written - useful for testing.
|
||||
@@ -21,7 +20,7 @@ public class ItemTrackingItemWriter<T> implements ItemWriter<T> {
|
||||
|
||||
public void write(List<? extends T> items) throws Exception {
|
||||
if (failed!=null && items.contains(failed)) {
|
||||
throw new ValidationException("validation failed");
|
||||
throw new RuntimeException("write failed again");
|
||||
}
|
||||
this.items.addAll(items);
|
||||
int current = counter;
|
||||
@@ -29,7 +28,7 @@ public class ItemTrackingItemWriter<T> implements ItemWriter<T> {
|
||||
if (current < failure && counter >= failure) {
|
||||
failed = items.get(failure-current-1);
|
||||
this.items.remove(failed);
|
||||
throw new ValidationException("validation failed");
|
||||
throw new RuntimeException("write failed");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,7 +36,7 @@ public class ItemTrackingItemWriter<T> implements ItemWriter<T> {
|
||||
return items;
|
||||
}
|
||||
|
||||
public void setValidationFailure(int failure) {
|
||||
public void setWriteFailure(int failure) {
|
||||
this.failure = failure;
|
||||
}
|
||||
|
||||
|
||||
@@ -16,20 +16,33 @@
|
||||
<bean id="step1" parent="skipLimitStep">
|
||||
<property name="skipLimit" value="1" />
|
||||
<property name="itemReader" ref="fileItemReader" />
|
||||
<property name="itemProcessor">
|
||||
<bean
|
||||
class="org.springframework.batch.sample.domain.trade.internal.TradeProcessor"
|
||||
p:validationFailure="3" />
|
||||
</property>
|
||||
<property name="itemWriter">
|
||||
<bean
|
||||
class="org.springframework.batch.sample.domain.trade.internal.TradeWriter"
|
||||
p:dao-ref="tradeDao" p:failure="3" />
|
||||
p:dao-ref="tradeDao" />
|
||||
</property>
|
||||
</bean>
|
||||
<bean id="step2" parent="skipLimitStep">
|
||||
<property name="commitInterval" value="2" />
|
||||
<property name="skipLimit" value="1" />
|
||||
<!-- No rollback for exceptions that are marked with "+" in the tx attributes -->
|
||||
<property name="transactionAttribute"
|
||||
value="+org.springframework.batch.item.validator.ValidationException" />
|
||||
<property name="skippableExceptionClasses">
|
||||
<list>
|
||||
<value>org.springframework.batch.item.validator.ValidationException</value>
|
||||
</list>
|
||||
</property>
|
||||
<property name="itemReader"
|
||||
ref="tradeSqlItemReader" />
|
||||
<property name="itemProcessor">
|
||||
<bean
|
||||
class="org.springframework.batch.sample.domain.trade.internal.TradeProcessor"
|
||||
p:validationFailure="2" />
|
||||
</property>
|
||||
<property name="itemWriter"
|
||||
ref="itemTrackingWriter" />
|
||||
</bean>
|
||||
@@ -38,8 +51,7 @@
|
||||
</bean>
|
||||
|
||||
<bean id="itemTrackingWriter"
|
||||
class="org.springframework.batch.sample.support.ItemTrackingItemWriter"
|
||||
p:validationFailure="2" />
|
||||
class="org.springframework.batch.sample.support.ItemTrackingItemWriter" />
|
||||
|
||||
<bean id="tradeSqlItemReader"
|
||||
class="org.springframework.batch.item.database.JdbcCursorItemReader">
|
||||
|
||||
@@ -45,8 +45,8 @@ public class SkipSampleFunctionalTests extends AbstractValidatingBatchLauncherTe
|
||||
// 5 input records, 1 skipped => 4 written to output
|
||||
assertEquals(before + 4, after);
|
||||
|
||||
// no item was processed twice (no rollback occurred despite error on write)
|
||||
assertEquals(after, writer.getItems().size());
|
||||
// no item was processed twice (one rollback occurred due to validation error)
|
||||
assertEquals(after - 1, writer.getItems().size());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -42,13 +42,13 @@ public class ItemTrackingItemWriterTests {
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testValidationFailure() throws Exception {
|
||||
writer.setValidationFailure(2);
|
||||
public void testWriteFailure() throws Exception {
|
||||
writer.setWriteFailure(2);
|
||||
try {
|
||||
writer.write(Arrays.asList("a", "b", "c"));
|
||||
fail("Expected ValidationException");
|
||||
fail("Expected Write Failure Exception");
|
||||
}
|
||||
catch (ValidationException e) {
|
||||
catch (RuntimeException e) {
|
||||
// expected
|
||||
}
|
||||
// the failed item is removed
|
||||
@@ -57,9 +57,9 @@ public class ItemTrackingItemWriterTests {
|
||||
assertEquals(5, writer.getItems().size());
|
||||
try {
|
||||
writer.write(Arrays.asList("f", "b", "g"));
|
||||
fail("Expected ValidationException");
|
||||
fail("Expected RuntimeException");
|
||||
}
|
||||
catch (ValidationException e) {
|
||||
catch (RuntimeException e) {
|
||||
// expected
|
||||
}
|
||||
// barf immediately if a failure is detected
|
||||
|
||||
Reference in New Issue
Block a user