Skip to content

Commit abe62d1

Browse files
committed
Replace apache URIBuilder usages
1 parent 016c8e1 commit abe62d1

31 files changed

Lines changed: 407 additions & 627 deletions

File tree

src/main/java/org/prebid/server/analytics/reporter/liveintent/LiveIntentAnalyticsReporter.java

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import com.iab.openrtb.response.SeatBid;
77
import io.vertx.core.Future;
88
import org.apache.commons.collections4.CollectionUtils;
9-
import org.apache.http.client.utils.URIBuilder;
109
import org.prebid.server.analytics.AnalyticsReporter;
1110
import org.prebid.server.analytics.model.AuctionEvent;
1211
import org.prebid.server.analytics.model.NotificationEvent;
@@ -27,9 +26,9 @@
2726
import org.prebid.server.log.LoggerFactory;
2827
import org.prebid.server.proto.openrtb.ext.request.ExtRequest;
2928
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid;
29+
import org.prebid.server.util.UriTemplate;
3030
import org.prebid.server.vertx.httpclient.HttpClient;
3131

32-
import java.net.URISyntaxException;
3332
import java.util.Collection;
3433
import java.util.List;
3534
import java.util.Objects;
@@ -43,6 +42,7 @@ public class LiveIntentAnalyticsReporter implements AnalyticsReporter {
4342

4443
private final HttpClient httpClient;
4544
private final LiveIntentAnalyticsProperties properties;
45+
private final UriTemplate analyticsEndpointTemplate;
4646
private final JacksonMapper jacksonMapper;
4747

4848
public LiveIntentAnalyticsReporter(
@@ -52,6 +52,7 @@ public LiveIntentAnalyticsReporter(
5252

5353
this.httpClient = Objects.requireNonNull(httpClient);
5454
this.properties = Objects.requireNonNull(properties);
55+
this.analyticsEndpointTemplate = UriTemplate.of(properties.getAnalyticsEndpoint());
5556
this.jacksonMapper = Objects.requireNonNull(jacksonMapper);
5657
}
5758

@@ -96,12 +97,11 @@ private Future<Void> processAuctionEvent(AuctionContext auctionContext) {
9697

9798
try {
9899
return httpClient.post(
99-
new URIBuilder(properties.getAnalyticsEndpoint())
100-
.setPath("/analytic-events/pbsj-bids")
101-
.build()
102-
.toString(),
103-
jacksonMapper.encodeToString(pbsjBids),
104-
properties.getTimeoutMs())
100+
analyticsEndpointTemplate.toBuilder()
101+
.pathParam("path", "/analytic-events/pbsj-bids")
102+
.build(),
103+
jacksonMapper.encodeToString(pbsjBids),
104+
properties.getTimeoutMs())
105105
.mapEmpty();
106106
} catch (Exception e) {
107107
logger.error("Error processing event: {}", e.getMessage());
@@ -169,18 +169,12 @@ private Optional<PbsjBid> buildPbsjBid(
169169
}
170170

171171
private Future<Void> processNotificationEvent(NotificationEvent notificationEvent) {
172-
try {
173-
final String url = new URIBuilder(properties.getAnalyticsEndpoint())
174-
.setPath("/analytic-events/pbsj-winning-bid")
175-
.setParameter("b", notificationEvent.getBidder())
176-
.setParameter("bidId", notificationEvent.getBidId())
177-
.build()
178-
.toString();
179-
return httpClient.get(url, properties.getTimeoutMs()).mapEmpty();
180-
} catch (URISyntaxException e) {
181-
logger.error("Error composing url for notification event: {}", e.getMessage());
182-
return Future.failedFuture(e);
183-
}
172+
final String url = analyticsEndpointTemplate.toBuilder()
173+
.pathParam("path", "/analytic-events/pbsj-winning-bid")
174+
.queryParam("b", notificationEvent.getBidder())
175+
.queryParam("bidId", notificationEvent.getBidId())
176+
.build();
177+
return httpClient.get(url, properties.getTimeoutMs()).mapEmpty();
184178
}
185179

186180
@Override

src/main/java/org/prebid/server/bidder/adgeneration/AdgenerationBidder.java

Lines changed: 17 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
import io.vertx.core.http.HttpMethod;
1515
import org.apache.commons.collections4.CollectionUtils;
1616
import org.apache.commons.lang3.StringUtils;
17-
import org.apache.http.client.utils.URIBuilder;
1817
import org.prebid.server.bidder.Bidder;
1918
import org.prebid.server.bidder.adgeneration.model.AdgenerationResponse;
2019
import org.prebid.server.bidder.model.BidderBid;
@@ -31,8 +30,8 @@
3130
import org.prebid.server.proto.openrtb.ext.response.BidType;
3231
import org.prebid.server.util.HttpUtil;
3332
import org.prebid.server.util.ObjectUtil;
33+
import org.prebid.server.util.UriTemplate;
3434

35-
import java.net.URISyntaxException;
3635
import java.util.ArrayList;
3736
import java.util.List;
3837
import java.util.Objects;
@@ -51,11 +50,11 @@ public class AdgenerationBidder implements Bidder<Void> {
5150
new TypeReference<>() {
5251
};
5352

54-
private final String endpointUrl;
53+
private final UriTemplate endpointTemplate;
5554
private final JacksonMapper mapper;
5655

5756
public AdgenerationBidder(String endpointUrl, JacksonMapper mapper) {
58-
this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
57+
this.endpointTemplate = UriTemplate.of(endpointUrl);
5958
this.mapper = Objects.requireNonNull(mapper);
6059
}
6160

@@ -96,21 +95,14 @@ private ExtImpAdgeneration parseAndValidateImpExt(Imp imp) {
9695
}
9796

9897
private String getUri(String adSize, String id, String currency, BidRequest bidRequest) {
99-
final URIBuilder uriBuilder;
100-
try {
101-
uriBuilder = new URIBuilder(endpointUrl);
102-
} catch (URISyntaxException e) {
103-
throw new PreBidException("Invalid url: %s, error: %s".formatted(endpointUrl, e.getMessage()));
104-
}
105-
106-
uriBuilder
107-
.addParameter("posall", "SSPLOC")
108-
.addParameter("id", id)
109-
.addParameter("hb", "true")
110-
.addParameter("t", "json3")
111-
.addParameter("currency", currency)
112-
.addParameter("sdkname", "prebidserver")
113-
.addParameter("adapterver", VERSION);
98+
final UriTemplate.UriBuilder uriBuilder = endpointTemplate.toBuilder()
99+
.queryParam("posall", "SSPLOC")
100+
.queryParam("id", id)
101+
.queryParam("hb", "true")
102+
.queryParam("t", "json3")
103+
.queryParam("currency", currency)
104+
.queryParam("sdkname", "prebidserver")
105+
.queryParam("adapterver", VERSION);
114106

115107
addParameterIfNotEmpty(uriBuilder, "sizes", adSize);
116108
addParameterIfNotEmpty(uriBuilder, "tp", ObjectUtil.getIfNotNull(bidRequest.getSite(), Site::getPage));
@@ -122,21 +114,21 @@ private String getUri(String adSize, String id, String currency, BidRequest bidR
122114
final Device device = bidRequest.getDevice();
123115
final String deviceOs = device != null ? device.getOs() : null;
124116
if ("android".equals(deviceOs)) {
125-
uriBuilder.addParameter("sdktype", "1");
117+
uriBuilder.queryParam("sdktype", "1");
126118
addParameterIfNotEmpty(uriBuilder, "advertising_id", device.getIfa());
127119
} else if ("ios".equals(deviceOs)) {
128-
uriBuilder.addParameter("sdktype", "2");
120+
uriBuilder.queryParam("sdktype", "2");
129121
addParameterIfNotEmpty(uriBuilder, "idfa", device.getIfa());
130122
} else {
131-
uriBuilder.addParameter("sdktype", "0");
123+
uriBuilder.queryParam("sdktype", "0");
132124
}
133125

134-
return uriBuilder.toString();
126+
return uriBuilder.build();
135127
}
136128

137-
private static void addParameterIfNotEmpty(URIBuilder uriBuilder, String parameter, String value) {
129+
private static void addParameterIfNotEmpty(UriTemplate.UriBuilder uriBuilder, String parameter, String value) {
138130
if (StringUtils.isNotEmpty(value)) {
139-
uriBuilder.addParameter(parameter, value);
131+
uriBuilder.queryParam(parameter, value);
140132
}
141133
}
142134

src/main/java/org/prebid/server/bidder/adnuntius/AdnuntiusBidder.java

Lines changed: 18 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import org.apache.commons.lang3.BooleanUtils;
2323
import org.apache.commons.lang3.ObjectUtils;
2424
import org.apache.commons.lang3.StringUtils;
25-
import org.apache.http.client.utils.URIBuilder;
2625
import org.prebid.server.bidder.Bidder;
2726
import org.prebid.server.bidder.adnuntius.model.request.AdnuntiusMetaData;
2827
import org.prebid.server.bidder.adnuntius.model.request.AdnuntiusNativeRequest;
@@ -58,9 +57,9 @@
5857
import org.prebid.server.util.BidderUtil;
5958
import org.prebid.server.util.HttpUtil;
6059
import org.prebid.server.util.ObjectUtil;
60+
import org.prebid.server.util.UriTemplate;
6161

6262
import java.math.BigDecimal;
63-
import java.net.URISyntaxException;
6463
import java.time.Clock;
6564
import java.time.OffsetDateTime;
6665
import java.util.ArrayList;
@@ -83,8 +82,8 @@ public class AdnuntiusBidder implements Bidder<AdnuntiusRequest> {
8382
private static final int BANNER_MTYPE = 1;
8483
private static final int NATIVE_MTYPE = 4;
8584

86-
private final String endpointUrl;
87-
private final String euEndpoint;
85+
private final UriTemplate endpointTemplate;
86+
private final UriTemplate euEndpointTemplate;
8887
private final Clock clock;
8988
private final JacksonMapper mapper;
9089

@@ -93,8 +92,8 @@ public AdnuntiusBidder(String endpointUrl,
9392
Clock clock,
9493
JacksonMapper mapper) {
9594

96-
this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
97-
this.euEndpoint = euEndpoint == null ? null : HttpUtil.validateUrl(euEndpoint);
95+
this.endpointTemplate = UriTemplate.of(endpointUrl);
96+
this.euEndpointTemplate = euEndpoint != null ? UriTemplate.of(euEndpoint) : null;
9897
this.clock = Objects.requireNonNull(clock);
9998
this.mapper = Objects.requireNonNull(mapper);
10099
}
@@ -261,35 +260,22 @@ private List<HttpRequest<AdnuntiusRequest>> createHttpRequests(
261260
}
262261

263262
private String makeEndpoint(BidRequest bidRequest, Boolean noCookies) {
264-
try {
265-
final String gdpr = extractGdpr(bidRequest.getRegs());
266-
final String url = StringUtils.isNotBlank(gdpr) ? euEndpoint : endpointUrl;
267-
268-
if (url == null) {
269-
throw new PreBidException("an EU endpoint is required but invalid");
270-
}
271-
272-
final URIBuilder uriBuilder = new URIBuilder(url)
273-
.addParameter("format", "prebidServer")
274-
.addParameter("tzo", getTimeZoneOffset());
275-
276-
if (StringUtils.isNotEmpty(gdpr)) {
277-
uriBuilder.addParameter("gdpr", gdpr);
278-
}
263+
final String gdpr = extractGdpr(bidRequest.getRegs());
264+
final UriTemplate template = StringUtils.isNotBlank(gdpr) ? euEndpointTemplate : endpointTemplate;
279265

280-
final String consent = extractConsent(bidRequest.getUser());
281-
if (StringUtils.isNotEmpty(consent)) {
282-
uriBuilder.addParameter("consentString", consent);
283-
}
266+
if (template == null) {
267+
throw new PreBidException("an EU endpoint is required but invalid");
268+
}
284269

285-
if (noCookies || extractNoCookies(bidRequest.getDevice())) {
286-
uriBuilder.addParameter("noCookies", "true");
287-
}
270+
final String consent = extractConsent(bidRequest.getUser());
288271

289-
return uriBuilder.build().toString();
290-
} catch (URISyntaxException | IllegalArgumentException e) {
291-
throw new PreBidException(e.getMessage());
292-
}
272+
return template.toBuilder()
273+
.queryParam("format", "prebidServer")
274+
.queryParam("tzo", getTimeZoneOffset())
275+
.queryParam("gdpr", StringUtils.isNotEmpty(gdpr) ? gdpr : null)
276+
.queryParam("consentString", StringUtils.isNotEmpty(consent) ? consent : null)
277+
.queryParam("noCookies", noCookies || extractNoCookies(bidRequest.getDevice()) ? "true" : null)
278+
.build();
293279
}
294280

295281
private String getTimeZoneOffset() {

src/main/java/org/prebid/server/bidder/amx/AmxBidder.java

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
import com.iab.openrtb.response.SeatBid;
1414
import org.apache.commons.collections4.CollectionUtils;
1515
import org.apache.commons.lang3.StringUtils;
16-
import org.apache.http.client.utils.URIBuilder;
1716
import org.prebid.server.bidder.Bidder;
1817
import org.prebid.server.bidder.amx.model.AmxBidExt;
1918
import org.prebid.server.bidder.model.BidderBid;
@@ -30,9 +29,8 @@
3029
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebid;
3130
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta;
3231
import org.prebid.server.util.BidderUtil;
33-
import org.prebid.server.util.HttpUtil;
32+
import org.prebid.server.util.UriTemplate;
3433

35-
import java.net.URISyntaxException;
3634
import java.util.ArrayList;
3735
import java.util.Collection;
3836
import java.util.Collections;
@@ -52,20 +50,12 @@ public class AmxBidder implements Bidder<BidRequest> {
5250
private final JacksonMapper mapper;
5351

5452
public AmxBidder(String endpointUrl, JacksonMapper mapper) {
55-
this.mapper = Objects.requireNonNull(mapper);
5653
this.endpointUrl = resolveEndpointUrl(endpointUrl);
54+
this.mapper = Objects.requireNonNull(mapper);
5755
}
5856

5957
private static String resolveEndpointUrl(String url) {
60-
final URIBuilder uriBuilder;
61-
try {
62-
uriBuilder = new URIBuilder(HttpUtil.validateUrl(Objects.requireNonNull(url)));
63-
} catch (URISyntaxException e) {
64-
throw new IllegalArgumentException("Invalid url: %s, error: %s".formatted(url, e.getMessage()));
65-
}
66-
return uriBuilder
67-
.addParameter(VERSION_PARAM, ADAPTER_VERSION)
68-
.toString();
58+
return UriTemplate.of(url).toBuilder().queryParam(VERSION_PARAM, ADAPTER_VERSION).build();
6959
}
7060

7161
@Override

src/main/java/org/prebid/server/bidder/appnexus/AppnexusBidder.java

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.apache.commons.lang3.BooleanUtils;
2020
import org.apache.commons.lang3.ObjectUtils;
2121
import org.apache.commons.lang3.StringUtils;
22-
import org.apache.http.client.utils.URIBuilder;
2322
import org.prebid.server.auction.model.Endpoint;
2423
import org.prebid.server.bidder.Bidder;
2524
import org.prebid.server.bidder.appnexus.proto.AppnexusBidExt;
@@ -51,12 +50,11 @@
5150
import org.prebid.server.proto.openrtb.ext.response.BidType;
5251
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidVideo;
5352
import org.prebid.server.util.BidderUtil;
54-
import org.prebid.server.util.HttpUtil;
5553
import org.prebid.server.util.ObjectUtil;
54+
import org.prebid.server.util.UriTemplate;
5655

5756
import jakarta.validation.ValidationException;
5857
import java.math.BigDecimal;
59-
import java.net.URISyntaxException;
6058
import java.util.ArrayList;
6159
import java.util.Collection;
6260
import java.util.Collections;
@@ -83,7 +81,7 @@ public class AppnexusBidder implements Bidder<BidRequest> {
8381
new TypeReference<>() {
8482
};
8583

86-
private final String endpointUrl;
84+
private final UriTemplate endpointTemplate;
8785
private final Integer headerBiddingSource;
8886
private final Map<Integer, String> iabCategories;
8987
private final JacksonMapper mapper;
@@ -93,7 +91,7 @@ public AppnexusBidder(String endpointUrl,
9391
Map<Integer, String> iabCategories,
9492
JacksonMapper mapper) {
9593

96-
this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
94+
this.endpointTemplate = UriTemplate.of(endpointUrl);
9795
this.headerBiddingSource = ObjectUtils.defaultIfNull(platformId, DEFAULT_PLATFORM_ID);
9896
this.iabCategories = ObjectUtils.defaultIfNull(iabCategories, Collections.emptyMap());
9997
this.mapper = Objects.requireNonNull(mapper);
@@ -307,13 +305,7 @@ private String readKeywordsFromArray(JsonNode keywords) {
307305
}
308306

309307
private String makeUrl(String member) {
310-
try {
311-
return member != null
312-
? new URIBuilder(endpointUrl).addParameter("member_id", member).build().toString()
313-
: endpointUrl;
314-
} catch (URISyntaxException e) {
315-
throw new PreBidException(e.getMessage());
316-
}
308+
return endpointTemplate.toBuilder().queryParam("member_id", member).build();
317309
}
318310

319311
private static String extractEndpointName(BidRequest bidRequest) {

0 commit comments

Comments
 (0)