diff --git a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java index 3072091d198..09e43473dfa 100644 --- a/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java +++ b/src/main/java/org/prebid/server/bidder/pubmatic/PubmaticBidder.java @@ -596,7 +596,7 @@ private String resolveNativeAdm(String adm, List bidderErrors) { } final JsonNode nativeNode = admNode.get("native"); - if (!nativeNode.isMissingNode()) { + if (nativeNode != null && !nativeNode.isMissingNode()) { return nativeNode.toString(); } diff --git a/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java b/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java index 58f5b4d5a02..b44b7d4768d 100644 --- a/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/pubmatic/PubmaticBidderTest.java @@ -1316,6 +1316,28 @@ public void makeBidderResponseShouldReturnFledgeAuctionConfig() throws JsonProce assertThat(result.getIgi()).containsExactly(igi); } + @Test + public void makeBidderResponseShouldNotModifyAdmWhenNativeNodeIsNull() throws JsonProcessingException { + // given + final ObjectNode admNode = mapper.createObjectNode().put("otherField", "value"); + final BidderCall httpCall = givenHttpCall( + mapper.writeValueAsString( + givenBidResponse(bidBuilder -> bidBuilder.impid("123") + .adm(admNode.toString()) + .ext(mapper.valueToTree( + PubmaticBidExt.of(2, null, 12, null)))))); + + // when + final CompositeBidderResponse result = target.makeBidderResponse(httpCall, null); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getBids()) + .extracting(BidderBid::getBid) + .extracting(Bid::getAdm) + .containsExactly(admNode.toString()); + } + @Test public void makeBidsShouldFail() throws JsonProcessingException { //given