implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
- implementation "org.zalando:problem:$problemVersion"
- implementation "org.zalando:jackson-datatype-problem:$problemVersion"
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'
implementation "org.zalando:problem-spring-webflux:$problemSpringVersion"
+ implementation "org.zalando:jackson-datatype-problem:$problemVersion"
implementation "org.mapstruct:mapstruct:$mapStructVersion"
annotationProcessor "org.mapstruct:mapstruct-processor:$mapStructVersion"
ext {
// app + lib
problemVersion = '0.27.1'
- problemSpringVersion = '0.27.0'
- mapStructVersion = '1.5.2.Final'
- mapStructExtensionsVersion = '0.1.2'
- logbackVersion = '7.2'
+ problemSpringVersion = '0.29.1'
+ mapStructVersion = '1.5.5.Final'
+ mapStructExtensionsVersion = '1.0.2'
+ logbackVersion = '7.4'
lombokVersion = '1.18.28'
// app
- wiremockVersion = '3.1.3'
+ wiremockVersion = '4.0.4'
}
\ No newline at end of file
id 'com.github.spotbugs' // bug linting that can be picked up by IDE
}
-group 'org.onap.portalng'
+group 'org.onap.portal-ng'
version rootProject.file('version').text.trim()
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server'
- implementation "org.zalando:problem:$problemVersion"
implementation "org.zalando:jackson-datatype-problem:$problemVersion"
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'
implementation "org.zalando:problem-spring-webflux:$problemSpringVersion"
package org.onap.portalng.bff.config;
+import jakarta.validation.Valid;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
import java.util.List;
import java.util.Map;
-import javax.validation.Valid;
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.boot.context.properties.ConstructorBinding;
import org.zalando.problem.Problem;
import org.zalando.problem.Status;
import reactor.core.publisher.Mono;
* urls.
*/
@Valid
-@ConstructorBinding
@ConfigurationProperties("bff")
@Data
public class BffConfig {
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.onap.portalng.bff.exceptions.DownstreamApiProblemException;
-import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
import org.springframework.http.client.reactive.ClientHttpConnector;
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
}
protected abstract DownstreamApiProblemException mapException(
- E errorResponse, HttpStatus httpStatus);
+ E errorResponse, HttpStatusCode httpStatusCode);
protected ClientHttpConnector getClientHttpConnector() {
// ConnectionTimeouts introduced due to
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
import org.springframework.http.client.reactive.ClientHttpConnector;
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
import org.springframework.web.reactive.function.client.WebClient;
@Override
protected DownstreamApiProblemException mapException(
- ErrorResponseKeycloakDto errorResponse, HttpStatus httpStatus) {
+ ErrorResponseKeycloakDto errorResponse, HttpStatusCode httpStatusCode) {
String errorDetail =
errorResponse.getErrorMessage() != null
? errorResponse.getErrorMessage()
: errorResponse.getError();
return DownstreamApiProblemException.builder()
- .title(httpStatus.toString())
+ .title(httpStatusCode.toString())
.detail(errorDetail)
.downstreamSystem(ProblemApiDto.DownstreamSystemEnum.KEYCLOAK.toString())
.downstreamMessageId("not set by downstream system")
- .downstreamStatus(httpStatus.value())
+ .downstreamStatus(httpStatusCode.value())
.build();
}
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
import org.springframework.web.reactive.function.client.WebClient;
@Override
protected DownstreamApiProblemException mapException(
- ProblemPortalHistoryDto errorResponse, HttpStatus httpStatus) {
+ ProblemPortalHistoryDto errorResponse, HttpStatusCode httpStatusCode) {
return DownstreamApiProblemException.builder()
- .title(httpStatus.toString())
+ .title(httpStatusCode.toString())
.detail(errorResponse.getDetail())
.downstreamMessageId(errorResponse.getType())
.downstreamSystem(ProblemApiDto.DownstreamSystemEnum.PORTAL_HISTORY.toString())
- .downstreamStatus(httpStatus.value())
+ .downstreamStatus(httpStatusCode.value())
.build();
}
}
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
import org.springframework.web.reactive.function.client.WebClient;
@Override
protected DownstreamApiProblemException mapException(
- ProblemPortalPrefsDto errorResponse, HttpStatus httpStatus) {
+ ProblemPortalPrefsDto errorResponse, HttpStatusCode httpStatusCode) {
return DownstreamApiProblemException.builder()
- .title(httpStatus.toString())
+ .title(httpStatusCode.toString())
.detail(errorResponse.getDetail())
.downstreamMessageId(errorResponse.getType())
.downstreamSystem(ProblemApiDto.DownstreamSystemEnum.PORTAL_PREFS.toString())
- .downstreamStatus(httpStatus.value())
+ .downstreamStatus(httpStatusCode.value())
.build();
}
}
package org.onap.portalng.bff.controller;
-import javax.validation.Valid;
+import jakarta.validation.Valid;
import org.onap.portalng.bff.config.BffConfig;
import org.onap.portalng.bff.openapi.server.api.PreferencesApi;
import org.onap.portalng.bff.openapi.server.model.CreatePreferencesRequestApiDto;
import java.util.Objects;
import org.onap.portalng.bff.exceptions.DownstreamApiProblemException;
import org.onap.portalng.bff.openapi.server.model.ProblemApiDto;
-import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
public class ErrorHandler {
/**
}
public static DownstreamApiProblemException getDownstreamApiProblemException(
- HttpStatus httpStatus,
+ HttpStatusCode httpStatusCode,
List<String> variables,
String text,
String messageId,
: null;
return DownstreamApiProblemException.builder()
- .title(httpStatus.toString())
+ .title(httpStatusCode.toString())
.detail(errorDetail)
.downstreamMessageId(Objects.requireNonNullElse(messageId, "not set by downstream system"))
.downstreamSystem(downStreamSystem.toString())
- .downstreamStatus(httpStatus.value())
+ .downstreamStatus(httpStatusCode.value())
.build();
}
}
import java.net.URI;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod;
-import org.springframework.http.HttpStatus;
+import org.springframework.http.HttpStatusCode;
@Slf4j
public class Logger {
log.info("bff - request - X-Request-Id {} {} {}", xRequestId, methode, path);
}
- public static void responseLog(String xRequestId, HttpStatus code) {
- log.info("bff - response - X-Request-Id {} {}", xRequestId, code);
+ public static void responseLog(String xRequestId, HttpStatusCode httpStatusCode) {
+ log.info("bff - response - X-Request-Id {} {}", xRequestId, httpStatusCode);
}
public static void errorLog(String xRequestId, String msg, String id, String app) {
configOptions = [
openApiNullable : "false",
dateLibrary : "java8",
- serializationLibrary: "jackson"
+ serializationLibrary: "jackson",
+ useJakartaEe : "true",
]
typeMappings = [
"File": "org.springframework.core.io.buffer.DataBuffer"
configOptions = [
openApiNullable : "false",
dateLibrary : "java8",
- serializationLibrary: "jackson"
+ serializationLibrary: "jackson",
+ useJakartaEe : "true",
]
typeMappings = [
"File": "org.springframework.core.io.buffer.DataBuffer"
configOptions = [
openApiNullable : "false",
dateLibrary : "java8",
- serializationLibrary: "jackson"
+ serializationLibrary: "jackson",
+ useJakartaEe : "true",
]
typeMappings = [
"File": "org.springframework.core.io.buffer.DataBuffer"
interfaceOnly: "true",
useTags: "true",
reactive: "true",
+ useSpringBoot3: "true",
]
generateApiTests = false
generateApiDocumentation = true
// https://docs.gradle.org/current/userguide/plugins.html#sec:plugin_version_management
plugins {
id 'io.spring.dependency-management' version '1.1.2'
- id 'org.springframework.boot' version '2.7.14'
+ id 'org.springframework.boot' version '3.1.2'
id 'org.openapi.generator' version '7.0.0-beta'
id 'com.github.johnrengelman.shadow' version '7.1.2'
- id 'com.github.hierynomus.license' version '0.16.1'
id 'com.gorylenko.gradle-git-properties' version '2.4.1'
id 'com.diffplug.spotless' version '6.20.0'
id 'com.github.spotbugs' version '5.0.14'