Skip to content

Commit fbc2197

Browse files
committed
Fixed optable npe.
1 parent 1bd591d commit fbc2197

2 files changed

Lines changed: 25 additions & 2 deletions

File tree

extra/modules/optable-targeting/src/main/java/org/prebid/server/hooks/modules/optable/targeting/v1/core/BidResponseEnricher.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.iab.openrtb.response.BidResponse;
99
import com.iab.openrtb.response.SeatBid;
1010
import org.apache.commons.collections4.CollectionUtils;
11+
import org.apache.commons.lang3.StringUtils;
1112
import org.prebid.server.exception.InvalidRequestException;
1213
import org.prebid.server.hooks.execution.v1.auction.AuctionResponsePayloadImpl;
1314
import org.prebid.server.hooks.modules.optable.targeting.model.openrtb.Audience;
@@ -70,14 +71,15 @@ private ObjectNode targetingToObjectNode(List<Audience> targeting) {
7071

7172
for (Audience audience : targeting) {
7273
final List<AudienceId> ids = audience.getIds();
73-
if (CollectionUtils.isEmpty(ids)) {
74+
final String keyspace = audience.getKeyspace();
75+
if (CollectionUtils.isEmpty(ids) || StringUtils.isEmpty(keyspace)) {
7476
continue;
7577
}
7678

7779
final String joinedIds = ids.stream()
7880
.map(AudienceId::getId)
7981
.collect(Collectors.joining(","));
80-
node.putIfAbsent(audience.getKeyspace(), TextNode.valueOf(joinedIds));
82+
node.putIfAbsent(keyspace, TextNode.valueOf(joinedIds));
8183
}
8284

8385
return node;

extra/modules/optable-targeting/src/test/java/org/prebid/server/hooks/modules/optable/targeting/v1/core/BidResponseEnricherTest.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.prebid.server.hooks.modules.optable.targeting.v1.core;
22

33
import com.fasterxml.jackson.databind.node.ObjectNode;
4+
import com.iab.openrtb.response.BidResponse;
45
import org.junit.jupiter.api.Test;
56
import org.prebid.server.hooks.execution.v1.auction.AuctionResponsePayloadImpl;
67
import org.prebid.server.hooks.modules.optable.targeting.model.openrtb.Audience;
@@ -10,10 +11,30 @@
1011

1112
import java.util.List;
1213

14+
import static java.util.Collections.singletonList;
1315
import static org.assertj.core.api.Assertions.assertThat;
1416

1517
public class BidResponseEnricherTest extends BaseOptableTest {
1618

19+
@Test
20+
public void shouldSkipEmptyKeyspaceWhileEnrichingBidResponse() {
21+
// given
22+
final BidResponse bidResponse = givenBidResponse();
23+
final AuctionResponsePayload auctionResponsePayload = AuctionResponsePayloadImpl.of(bidResponse);
24+
final List<Audience> targeting = singletonList(new Audience(
25+
"provider",
26+
List.of(new AudienceId("audienceId"), new AudienceId("audienceId2")),
27+
null,
28+
1));
29+
final BidResponseEnricher enricher = BidResponseEnricher.of(targeting, mapper, jsonMerger);
30+
31+
// when
32+
final AuctionResponsePayload result = enricher.apply(auctionResponsePayload);
33+
34+
// then
35+
assertThat(result.bidResponse()).isEqualTo(bidResponse);
36+
}
37+
1738
@Test
1839
public void shouldEnrichBidResponseByTargetingKeywords() {
1940
// given

0 commit comments

Comments
 (0)