Skip to content

Commit f37eec6

Browse files
authored
Fix IllegalArgumentException when creating custom IndicesOption with empty Option or WildcardState set.
Original Pull Request #2076 Closes #2075
1 parent 14cc9ea commit f37eec6

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

Diff for: src/main/java/org/springframework/data/elasticsearch/core/RequestFactory.java

+6-1
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@
118118
* @author Farid Faoudi
119119
* @author Peer Mueller
120120
* @author Sijia Liu
121+
* @author Peter Nowak
121122
* @since 4.0
122123
*/
123124
class RequestFactory {
@@ -1248,7 +1249,11 @@ public org.elasticsearch.action.support.IndicesOptions toElasticsearchIndicesOpt
12481249
.map(it -> org.elasticsearch.action.support.IndicesOptions.WildcardStates.valueOf(it.name().toUpperCase()))
12491250
.collect(Collectors.toSet());
12501251

1251-
return new org.elasticsearch.action.support.IndicesOptions(EnumSet.copyOf(options), EnumSet.copyOf(wildcardStates));
1252+
return new org.elasticsearch.action.support.IndicesOptions(
1253+
options.isEmpty() ? EnumSet.noneOf(org.elasticsearch.action.support.IndicesOptions.Option.class)
1254+
: EnumSet.copyOf(options),
1255+
wildcardStates.isEmpty() ? EnumSet.noneOf(org.elasticsearch.action.support.IndicesOptions.WildcardStates.class)
1256+
: EnumSet.copyOf(wildcardStates));
12521257
}
12531258
// endregion
12541259

Diff for: src/test/java/org/springframework/data/elasticsearch/core/RequestFactoryTests.java

+16
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import java.io.IOException;
2323
import java.time.Duration;
2424
import java.util.Arrays;
25+
import java.util.EnumSet;
2526
import java.util.HashSet;
2627

2728
import org.elasticsearch.action.DocWriteRequest;
@@ -70,6 +71,7 @@
7071
* @author Peer Mueller
7172
* @author vdisk
7273
* @author Sijia Liu
74+
* @author Peter Nowak
7375
*/
7476
@SuppressWarnings("ConstantConditions")
7577
@ExtendWith(MockitoExtension.class)
@@ -628,6 +630,20 @@ void shouldAllowSourceQueryForReindexWithoutRemote() throws IOException, JSONExc
628630
assertEquals(expected, json, false);
629631
}
630632

633+
@Test // #2075
634+
@DisplayName("should not fail on empty Option set during toElasticsearchIndicesOptions")
635+
void shouldNotFailOnEmptyOptionsOnToElasticsearchIndicesOptions() {
636+
assertThat(requestFactory.toElasticsearchIndicesOptions(new IndicesOptions(
637+
EnumSet.noneOf(IndicesOptions.Option.class), EnumSet.of(IndicesOptions.WildcardStates.OPEN)))).isNotNull();
638+
}
639+
640+
@Test // #2075
641+
@DisplayName("should not fail on empty WildcardState set during toElasticsearchIndicesOptions")
642+
void shouldNotFailOnEmptyWildcardStatesOnToElasticsearchIndicesOptions() {
643+
assertThat(requestFactory.toElasticsearchIndicesOptions(IndicesOptions.STRICT_SINGLE_INDEX_NO_EXPAND_FORBID_CLOSED))
644+
.isNotNull();
645+
}
646+
631647
// region entities
632648
static class Person {
633649
@Nullable

0 commit comments

Comments
 (0)