Skip to content

Commit bece2a1

Browse files
bragejahrenthoalm
andauthored
OppslagException når kall mot eksterne tjenester feiler (#1074)
* Kaster OppslagException i ArbeidsfordelingRestClient * Skrevet tester til ArbeidsfordelingRestClient * Korrigerte eksisterende tester i ArbeidsfordtelingRestClient slik at kaster forventet exception, la til tester for AxsysRestClient som nå kaster OppslagException * Fjerner incrementLoggFeil fra AxsysRestClient * Refaktorerte AzureGraphRestClient til å bruke OppslagException, la til tester * Refaktorerte DokarkivRestClient, skrev enhetstes * Kaster OppslagException ved feil mot dokdistkanal * Endrer loglevel til warn for RestClientResponseException * Kaster OppslagException når distribusjon av journalpost feiler * Kaster OppslagException når henting av medlemskapsunntak feiler * Kaster OppslagException dersom PDL er nede i PdlClientCredentialRestClient og PdlRestClient * Fikset feilende test etter endringer --------- Co-authored-by: thoalm <[email protected]>
1 parent d668c28 commit bece2a1

20 files changed

+633
-54
lines changed

src/main/java/no/nav/familie/integrasjoner/arbeidsfordeling/ArbeidsfordelingRestClient.kt

+55-23
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package no.nav.familie.integrasjoner.arbeidsfordeling
22

33
import no.nav.familie.http.client.AbstractPingableRestClient
4+
import no.nav.familie.integrasjoner.felles.OppslagException
45
import no.nav.familie.kontrakter.felles.arbeidsfordeling.Enhet
56
import no.nav.familie.kontrakter.felles.navkontor.NavKontorEnhet
67
import org.springframework.beans.factory.annotation.Qualifier
78
import org.springframework.beans.factory.annotation.Value
9+
import org.springframework.http.HttpStatus
810
import org.springframework.stereotype.Service
911
import org.springframework.web.client.RestOperations
1012
import org.springframework.web.util.UriComponentsBuilder
@@ -18,32 +20,62 @@ class ArbeidsfordelingRestClient(
1820
restOperations: RestOperations,
1921
) : AbstractPingableRestClient(restOperations, "norg2") {
2022
fun hentEnhet(geografiskOmråde: String): NavKontorEnhet =
21-
getForEntity(
22-
UriComponentsBuilder
23-
.fromUri(norg2Uri)
24-
.pathSegment("api/v1/enhet/navkontor/$geografiskOmråde")
25-
.build()
26-
.toUri(),
27-
)
23+
try {
24+
getForEntity(
25+
UriComponentsBuilder
26+
.fromUri(norg2Uri)
27+
.pathSegment("api/v1/enhet/navkontor/$geografiskOmråde")
28+
.build()
29+
.toUri(),
30+
)
31+
} catch (e: Exception) {
32+
throw OppslagException(
33+
"Feil ved henting av enhet",
34+
"norg2.hentEnhet",
35+
OppslagException.Level.MEDIUM,
36+
HttpStatus.INTERNAL_SERVER_ERROR,
37+
e,
38+
)
39+
}
2840

2941
fun hentNavkontor(enhetId: String): NavKontorEnhet =
30-
getForEntity(
31-
UriComponentsBuilder
32-
.fromUri(norg2Uri)
33-
.pathSegment("api/v1/enhet/$enhetId")
34-
.build()
35-
.toUri(),
36-
)
42+
try {
43+
getForEntity(
44+
UriComponentsBuilder
45+
.fromUri(norg2Uri)
46+
.pathSegment("api/v1/enhet/$enhetId")
47+
.build()
48+
.toUri(),
49+
)
50+
} catch (e: Exception) {
51+
throw OppslagException(
52+
"Feil ved henting av navkontor",
53+
"norg2.hentNavkontor",
54+
OppslagException.Level.MEDIUM,
55+
HttpStatus.INTERNAL_SERVER_ERROR,
56+
e,
57+
)
58+
}
3759

38-
fun finnBehandlendeEnhetMedBesteMatch(arbeidsfordelingskriterie: ArbeidsfordelingKriterie): List<Enhet> {
39-
val uri =
40-
UriComponentsBuilder
41-
.fromUri(norg2Uri)
42-
.pathSegment("api/v1/arbeidsfordeling/enheter/bestmatch")
43-
.build()
44-
.toUri()
45-
return postForEntity<List<NavKontorEnhet>>(uri, arbeidsfordelingskriterie).map { Enhet(enhetId = it.enhetNr, enhetNavn = it.navn) }
46-
}
60+
fun finnBehandlendeEnhetMedBesteMatch(arbeidsfordelingskriterie: ArbeidsfordelingKriterie): List<Enhet> =
61+
try {
62+
postForEntity<List<NavKontorEnhet>>(
63+
UriComponentsBuilder
64+
.fromUri(norg2Uri)
65+
.pathSegment("api/v1/arbeidsfordeling/enheter/bestmatch")
66+
.build()
67+
.toUri(),
68+
arbeidsfordelingskriterie,
69+
).map { Enhet(enhetId = it.enhetNr, enhetNavn = it.navn) }
70+
} catch (e: Exception) {
71+
throw OppslagException(
72+
"Feil ved oppslag av best matchende behandlende enhet",
73+
"norg2.finnBehandlendeEnhetMedBesteMatch",
74+
OppslagException.Level.MEDIUM,
75+
HttpStatus.INTERNAL_SERVER_ERROR,
76+
e,
77+
)
78+
}
4779

4880
override val pingUri: URI
4981
get() =

src/main/java/no/nav/familie/integrasjoner/client/rest/AxsysRestClient.kt

+9-2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import org.springframework.stereotype.Service
1010
import org.springframework.web.client.RestOperations
1111
import org.springframework.web.util.UriComponentsBuilder
1212
import java.net.URI
13+
import no.nav.familie.integrasjoner.felles.OppslagException
14+
import org.springframework.http.HttpStatus
1315

1416
@Service
1517
class AxsysRestClient(
@@ -27,8 +29,13 @@ class AxsysRestClient(
2729
return try {
2830
getForEntity<TilgangV2DTO>(uri)
2931
} catch (e: Exception) {
30-
incrementLoggFeil("axsys")
31-
throw e
32+
throw OppslagException(
33+
"Feil ved henting av enheter Nav identer har tilgang til",
34+
"axsys.hentEnheterNavIdentHarTilgangTil",
35+
OppslagException.Level.MEDIUM,
36+
HttpStatus.INTERNAL_SERVER_ERROR,
37+
e
38+
)
3239
}
3340
}
3441
}

src/main/java/no/nav/familie/integrasjoner/client/rest/AzureGraphRestClient.kt

+16-4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import org.springframework.stereotype.Service
1111
import org.springframework.web.client.RestOperations
1212
import org.springframework.web.util.UriComponentsBuilder
1313
import java.net.URI
14+
import no.nav.familie.integrasjoner.felles.OppslagException
15+
import org.springframework.http.HttpStatus
1416

1517
@Service
1618
class AzureGraphRestClient(
@@ -43,16 +45,26 @@ class AzureGraphRestClient(
4345
},
4446
)
4547
} catch (e: Exception) {
46-
incrementLoggFeil("azure.saksbehandler.navIdent")
47-
throw e
48+
throw OppslagException(
49+
"Feil ved henting av saksbehandler med nav ident",
50+
"azure.saksbehandler.navIdent",
51+
OppslagException.Level.MEDIUM,
52+
HttpStatus.INTERNAL_SERVER_ERROR,
53+
e
54+
)
4855
}
4956

5057
fun hentSaksbehandler(id: String): AzureAdBruker =
5158
try {
5259
getForEntity(saksbehandlerUri(id))
5360
} catch (e: Exception) {
54-
incrementLoggFeil("azure.saksbehandler.id")
55-
throw e
61+
throw throw OppslagException(
62+
"Feil ved henting av saksbehandler med id",
63+
"azure.saksbehandler.id",
64+
OppslagException.Level.MEDIUM,
65+
HttpStatus.INTERNAL_SERVER_ERROR,
66+
e
67+
)
5668
}
5769

5870
companion object {

src/main/java/no/nav/familie/integrasjoner/client/rest/DokarkivRestClient.kt

+7-2
Original file line numberDiff line numberDiff line change
@@ -137,14 +137,19 @@ class DokarkivRestClient(
137137
try {
138138
patchForEntity<String>(uri, FerdigstillJournalPost(journalførendeEnhet), headers(navIdent))
139139
} catch (e: RestClientResponseException) {
140-
incrementLoggFeil("dokarkiv.ferdigstill.feil")
141140
if (e.statusCode.value() == HttpStatus.BAD_REQUEST.value()) {
142141
throw KanIkkeFerdigstilleJournalpostException(
143142
"Kan ikke ferdigstille journalpost " +
144143
"$journalpostId body ${e.responseBodyAsString}",
145144
)
146145
}
147-
throw e
146+
throw OppslagException(
147+
"Feil ved ferdigstilling av journalpost",
148+
"dokarkiv.ferdigstill.feil",
149+
OppslagException.Level.MEDIUM,
150+
HttpStatus.INTERNAL_SERVER_ERROR,
151+
e
152+
)
148153
}
149154
}
150155
}

src/main/java/no/nav/familie/integrasjoner/client/rest/DokdistRestClient.kt

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package no.nav.familie.integrasjoner.client.rest
22

33
import no.nav.familie.http.client.AbstractPingableRestClient
44
import no.nav.familie.http.util.UriUtil
5-
import no.nav.familie.integrasjoner.config.incrementLoggFeil
65
import no.nav.familie.integrasjoner.dokdist.domene.DistribuerJournalpostRequestTo
76
import no.nav.familie.integrasjoner.dokdist.domene.DistribuerJournalpostResponseTo
7+
import no.nav.familie.integrasjoner.felles.OppslagException
88
import org.springframework.beans.factory.annotation.Qualifier
99
import org.springframework.beans.factory.annotation.Value
10+
import org.springframework.http.HttpStatus
1011
import org.springframework.stereotype.Component
1112
import org.springframework.web.client.HttpClientErrorException
1213
import org.springframework.web.client.RestOperations
@@ -28,8 +29,13 @@ class DokdistRestClient(
2829
if (e is HttpClientErrorException.Gone) {
2930
throw e
3031
} else {
31-
incrementLoggFeil("dokdist.distribuer")
32-
throw e
32+
throw OppslagException(
33+
"Feil ved distribuering av journalpost",
34+
"dokdist.distribuer.distribuerJournalpost",
35+
OppslagException.Level.MEDIUM,
36+
HttpStatus.INTERNAL_SERVER_ERROR,
37+
e,
38+
)
3339
}
3440
}
3541

src/main/java/no/nav/familie/integrasjoner/client/rest/DokdistkanalRestClient.kt

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@ package no.nav.familie.integrasjoner.client.rest
22

33
import no.nav.familie.http.client.AbstractPingableRestClient
44
import no.nav.familie.http.util.UriUtil
5-
import no.nav.familie.integrasjoner.config.incrementLoggFeil
65
import no.nav.familie.integrasjoner.dokdistkanal.domene.BestemDistribusjonskanalRequest
76
import no.nav.familie.integrasjoner.dokdistkanal.domene.BestemDistribusjonskanalResponse
7+
import no.nav.familie.integrasjoner.felles.OppslagException
88
import no.nav.familie.log.mdc.MDCConstants
99
import org.slf4j.MDC
1010
import org.springframework.beans.factory.annotation.Qualifier
1111
import org.springframework.beans.factory.annotation.Value
1212
import org.springframework.http.HttpHeaders
13+
import org.springframework.http.HttpStatus
1314
import org.springframework.stereotype.Component
1415
import org.springframework.web.client.RestOperations
1516
import java.net.URI
@@ -27,8 +28,13 @@ class DokdistkanalRestClient(
2728
try {
2829
postForEntity(uri, req, httpHeaders())
2930
} catch (e: Exception) {
30-
incrementLoggFeil("dokdist.kanal")
31-
throw e
31+
throw OppslagException(
32+
"Feil ved henting av distribusjonskanal",
33+
"dokdist.kanal.bestemDistribusjonskanal",
34+
OppslagException.Level.MEDIUM,
35+
HttpStatus.INTERNAL_SERVER_ERROR,
36+
e,
37+
)
3238
}
3339

3440
private fun httpHeaders(): HttpHeaders =

src/main/java/no/nav/familie/integrasjoner/client/rest/MedlRestClient.kt

+9-4
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
package no.nav.familie.integrasjoner.client.rest
22

33
import no.nav.familie.http.client.AbstractPingableRestClient
4-
import no.nav.familie.integrasjoner.config.incrementLoggFeil
4+
import no.nav.familie.integrasjoner.felles.OppslagException
55
import no.nav.familie.integrasjoner.medlemskap.MedlemskapsunntakResponse
66
import no.nav.familie.log.NavHttpHeaders
77
import org.springframework.beans.factory.annotation.Qualifier
88
import org.springframework.beans.factory.annotation.Value
9+
import org.springframework.http.HttpStatus
910
import org.springframework.stereotype.Component
1011
import org.springframework.web.client.RestOperations
1112
import org.springframework.web.util.UriComponentsBuilder
@@ -39,9 +40,13 @@ class MedlRestClient(
3940
try {
4041
return getForEntity(medlemskapsunntakUri, httpHeaders)
4142
} catch (e: Exception) {
42-
incrementLoggFeil("medl.unntak")
43-
44-
throw RuntimeException("Feil ved kall til MEDL2", e)
43+
throw OppslagException(
44+
"Feil ved henting av medlemskapsunntak",
45+
"medl.unntak",
46+
OppslagException.Level.MEDIUM,
47+
HttpStatus.INTERNAL_SERVER_ERROR,
48+
e,
49+
)
4550
}
4651
}
4752

src/main/java/no/nav/familie/integrasjoner/client/rest/PdlClientCredentialRestClient.kt

+18-5
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package no.nav.familie.integrasjoner.client.rest
22

33
import no.nav.familie.http.client.AbstractRestClient
44
import no.nav.familie.http.util.UriUtil
5+
import no.nav.familie.integrasjoner.felles.OppslagException
56
import no.nav.familie.integrasjoner.felles.graphqlQuery
67
import no.nav.familie.integrasjoner.personopplysning.PdlRequestException
78
import no.nav.familie.integrasjoner.personopplysning.internal.PdlBolkResponse
@@ -11,6 +12,7 @@ import no.nav.familie.integrasjoner.personopplysning.internal.PdlPersonMedRelasj
1112
import no.nav.familie.kontrakter.felles.Tema
1213
import org.springframework.beans.factory.annotation.Qualifier
1314
import org.springframework.beans.factory.annotation.Value
15+
import org.springframework.http.HttpStatus
1416
import org.springframework.stereotype.Service
1517
import org.springframework.web.client.RestOperations
1618
import java.net.URI
@@ -36,11 +38,22 @@ class PdlClientCredentialRestClient(
3638
query = HENT_PERSON_RELASJONER_ADRESSEBESKYTTELSE,
3739
)
3840
val response =
39-
postForEntity<PdlBolkResponse<PdlPersonMedRelasjonerOgAdressebeskyttelse>>(
40-
pdlUri,
41-
request,
42-
pdlHttpHeaders(tema),
43-
)
41+
try {
42+
postForEntity<PdlBolkResponse<PdlPersonMedRelasjonerOgAdressebeskyttelse>>(
43+
pdlUri,
44+
request,
45+
pdlHttpHeaders(tema),
46+
)
47+
} catch (e: Exception) {
48+
throw OppslagException(
49+
"Feil ved henting av person med relasjoner og adressebeskyttelse",
50+
"pdl.cc.hentPersonMedRelasjonerOgAdressebeskyttelse",
51+
OppslagException.Level.MEDIUM,
52+
HttpStatus.INTERNAL_SERVER_ERROR,
53+
e,
54+
)
55+
}
56+
4457
return feilsjekkOgReturnerData(response)
4558
}
4659

src/main/java/no/nav/familie/integrasjoner/client/rest/PdlRestClient.kt

+15-5
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,21 @@ class PdlRestClient(
4949
)
5050

5151
val response: PdlResponse<PdlPersonMedAdressebeskyttelse> =
52-
postForEntity(
53-
pdlUri,
54-
pdlAdressebeskyttelseRequest,
55-
pdlHttpHeaders(tema),
56-
)
52+
try {
53+
postForEntity(
54+
pdlUri,
55+
pdlAdressebeskyttelseRequest,
56+
pdlHttpHeaders(tema),
57+
)
58+
} catch (e: Exception) {
59+
throw pdlOppslagException(
60+
personIdent = personIdent,
61+
httpStatus = HttpStatus.INTERNAL_SERVER_ERROR,
62+
error = e,
63+
feilmelding = "Feil ved henting av adressebeskyttelse",
64+
kilde = "PdlRestClient.hentAdressebeskyttelse",
65+
)
66+
}
5767

5868
return feilsjekkOgReturnerData(response, personIdent, kilde = "PdlRestClient.hentAdressebeskyttelse") { it.person }
5969
}

src/main/java/no/nav/familie/integrasjoner/config/ApiExceptionHandler.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ class ApiExceptionHandler {
4747

4848
@ExceptionHandler(RestClientResponseException::class)
4949
fun handleRestClientResponseException(e: RestClientResponseException): ResponseEntity<Ressurs<Any>> {
50-
secureLogger.error("RestClientResponseException : ${e.responseBodyAsString}", e)
51-
logger.error(
50+
secureLogger.warn("RestClientResponseException : ${e.responseBodyAsString}", e)
51+
logger.warn(
5252
"RestClientResponseException : {} {} {}",
5353
e.statusCode.value(),
5454
e.statusText,

0 commit comments

Comments
 (0)