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

JPA Java Discussion :

Récupérer des résultats d'une requête en JPA et tranformer les résultats en XML


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 10
    Par défaut Récupérer des résultats d'une requête en JPA et tranformer les résultats en XML
    Bonjour,

    Tout est plus ou moins dans le titre, voici quand même plus d'explications :

    Je suis entrain de développer des services web (serveur d'application Glassfish).
    Jusque là tout allait bien, je développais mes requêtes en JPA, le résultat correspondait à mes emtities crées pas de problème pour obtenir mes XML.

    La, j’ai une requête plus spécifique contenant des sommes :
    Ex : Select sum(primeBrute) as prime, sum(echeance) as janvier ….

    Je souhaite faire remonter un «tableau » de valeur. Mon problème c'est que je n’ai aucune correspondance avec une entity, comment faire ???

    Première question : est ce que cela est possible ??


    En effet j’ai testé différentes solutions mais aucune n’a marché pour l’instant.

    Ex :
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Produces({"application/xml", "application/json"})
        public List<Object[]> echenacierByMois(@PathParam("guid") String guid) {
            List <Object[]> lst = new ArrayList<Object[]>();
            String req = "Select sum(primeBrute) as prime, sum(echeance) as janvier ….";
            Query q = (Query) em.createQuery(req);
            lst = q.getResultList();
            return lst;
        }
    Ps : ma requête fonctionne je l’ai testé, je bloque concrètement sur le passage des résultats de celle-ci en XML

    Erreur retournée :
    javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A message body writer for Java class java.util.Vector, and Java type java.util.List<java.lang.Object[]>, and MIME media type application/xml was not found
    Ensuite j'ai essayé de créer une classe pour entre guillemet représenter l'entity manquante.
    Ma méthode est la même sauf que j'ai remplacé Object[] par le nom de ma classe.

    Ma classe correspondante ressemble à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    @XmlRootElement (name = "Echeancier")
    public class Echeancier implements Serializable{
        private double echeance;
        //autres double + getters and setters
    Message d'erreur :
    javax.ws.rs.WebApplicationException: javax.xml.bind.MarshalException
    - with linked exception:
    [com.sun.istack.SAXException2: unable to marshal type "java.math.BigDecimal" as an element because it is missing an @XmlRootElement annotation]
    Je n'arrive pas à décrypter cette erreur...


    Avez-vous des pistes ou des idées à me transmettre si ce que je souhaite faire est possible. Je suis à cours d'idée et je bloque totalement...

    Merci beaucoup

  2. #2
    Membre émérite

    Homme Profil pro
    Architecte technique
    Inscrit en
    Juin 2005
    Messages
    588
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2005
    Messages : 588
    Par défaut
    As-tu essayé de construire de nouveau objets serializable dans ta requête SELECT... Un truc du style:
    SELECT NEW TaNouvelleClasseJava(sum(primeBrute) , sum(echeance))...
    où ta nouvelle classe TaNouvelleClasseJava
    - est serializable
    - a pour attribut prime & janvier...
    - a l'annotation @XmlRootElement et l'annotation @XmlElement pour tes attributs prime, janvier, ...

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 141
    Par défaut
    Moi personnellement je ferai un Object Wrapper qui prend le résultat de la requête, et cet object wrapper est annotaté @XmlRootElement et le tour est joué. Cela se fait dansta Dao, et pas grand chose à faire.
    NB: Ton wrapper n'est pas une entité donc n'a pas de correspondance dans la base de données.

Discussions similaires

  1. Récupérer les résultats d'une requête dans des variables
    Par christophebolmontcha dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 23/05/2014, 10h14
  2. Réponses: 2
    Dernier message: 24/11/2012, 13h51
  3. Réponses: 2
    Dernier message: 23/01/2008, 08h36
  4. Réponses: 6
    Dernier message: 24/06/2007, 01h13

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