IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Boot Java Discussion :

[WebFlux] inference variable V


Sujet :

Spring Boot Java

  1. #1
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut [WebFlux] inference variable V
    Bonjour,

    Je fais appel à deux microservices avec WebClient
    J'ai deux méthodes (test1 et test2) dans mon service pour tester unitairement les appels. Ces deux méthodes fonctionnent

    Je souhaiterai faire appel au premier "ouvrageClient" pour récupérer un Flux d'Ouvrage et à partir de ce flux d'ouvrage faire appel à l'autre WebClient "operationClient" pour récupérer un Flux d'opération.

    Par contre, j'ai une erreur à la compilation dans la méthode getRelatedOperations

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    java: incompatible types: inference variable V has incompatible bounds
        equality constraints: com.rte.prisk.core.operation.dto.query.OperationLightDto
        lower bounds: reactor.core.publisher.Flux<com.rte.prisk.core.operation.dto.query.OperationLightDto>

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public class RelatedOperationService {
     
        private  OperationClient operationClient;
        private  OuvrageClient ouvrageClient;
     
        public Flux<OperationLightDto> getRelatedOperations(Long[] ouvrageIds){
            final Flux<OuvrageDto> ouvrageFlux = ouvrageClient.getRelatedOuvrages(ouvrageIds); //équivaut à la méthode test1
            return ouvrageFlux
                    .map(ouvrageDto -> {
                        return operationClient.getRelatedOperations(ouvrageDto.getId());// équivaut à la méthode test2
                    });
        }
     
        public Flux<OuvrageDto> test1(Long ouvrageIds[]){
            return  ouvrageClient.getRelatedOuvrages(ouvrageIds);
        }
     
        public Flux<OperationLightDto> test2(Long ouvrageId){
            return operationClient.getRelatedOperations(ouvrageId);
        }
     
    }
    Avez-vous une idée pour cette erreur ?

    Bien cordialement

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : Cameroun

    Informations forums :
    Inscription : Avril 2009
    Messages : 168
    Points : 122
    Points
    122
    Par défaut
    Bonjour,

    est ce que le type retour de la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    operationClient.getRelatedOperations(ouvrageDto.getId())
    correspond exactement à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Flux<OperationLightDto>
    ?
    car l'erreur semble dire que l'objet OperationLightDto n'est pas le même

  3. #3
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Bonjour,

    merci pour la réponse

    La méthode retourne bien un Flux<OperationLightDto>, d'où mon incompréhension

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    @Service
    public class OperationClient {
     
        private final WebClient webClient;
     
        public OperationClient(WebClient.Builder builder) {
            this.webClient = builder.baseUrl("lb://operation-query-microservice/operation/").build();
        }
     
     
        public Flux<OperationLightDto> getRelatedOperations(Long ouvrageId){
            return webClient
                    .get()
                    .uri("related/{ouvrageId}",ouvrageId)
                    .retrieve()
                    .bodyToFlux(OperationLightDto.class)
                    .subscribeOn(Schedulers.parallel());
        }
     
    }
    En modifiant, le code le retour la méthode operationClient.getRelatedOperations(ouvrageDto.getId()) retourne bien un Flux<OperationLightDto>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        public Flux<OperationLightDto> getRelatedOperations(Long[] ouvrageIds){
            final Flux<OuvrageDto> ouvrageFlux = ouvrageClient.getRelatedOuvrages(ouvrageIds); //= test1
            return ouvrageFlux
                    .map(ouvrageDto -> {
                        Flux<OperationLightDto> op = operationClient.getRelatedOperations(ouvrageDto.getId());// = test2
                        return op;
                    });
        }

  4. #4
    Membre habitué Avatar de pingoui
    Homme Profil pro
    Activité professionnelle sans liens avec le developpement
    Inscrit en
    Juillet 2004
    Messages
    582
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Activité professionnelle sans liens avec le developpement
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2004
    Messages : 582
    Points : 185
    Points
    185
    Par défaut
    Bonjour,

    j'ai toujours mon erreur et je ne comprends pas pourquoi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Required type:
    Flux<OperationLightDto>
    Provided:
    Flux<Object>
    no instance(s) of type variable(s) exist so that Flux<OperationLightDto> conforms to OperationLightDto inference variable V has incompatible bounds: equality constraints: OperationLightDto lower bounds: Flux<OperationLightDto>
    Avez-vous un idée, svp ?

Discussions similaires

  1. Réponses: 4
    Dernier message: 18/07/2002, 13h32
  2. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22
  3. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 11h08
  4. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  5. les variables globales static
    Par gRRosminet dans le forum C
    Réponses: 8
    Dernier message: 27/04/2002, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo