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

XSL/XSLT/XPATH XML Discussion :

Impossible de convertir le type d'argument/de retour dans la méthode


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Impossible de convertir le type d'argument/de retour dans la méthode
    Bonjour a tous,

    Etant donné que je suis débutant en XSLT et j'avais effectué des recherches depuis 2 jours sans réussir. Je voudrais consulter votre avis sur la conversion des types dans XSLT.

    Voici le document XSL dont j'utilise:
    <?xml version="1.0"?>
    <xsl:stylesheet version="1.0" xmlns="http://www.w3.org/TR/REC-html40" xmlnssl="http://www.w3.org/1999/XSL/Transform" xmlns:lxslt="http://xml.apache.org/xslt"
    xmlns:java="http://xml.apache.org/xslt/java" exclude-result-prefixes="java">
    <!-- Transformation rules for attributes -->
    <xsl:param name="transformationRules"/>
    <xsl:param name="wbxmlVersion"/>
    <xsl:param name="publicId"/>
    <xsl:param name="characterSet"/>
    <xsl:param name="stringTable"/>
    <xsl:output method="text" indent="no"/>
    <!-- Remove #x20, #x9, #xD ou #xA characters in the input XML document -->
    <xsl:strip-space elements="*"/>
    <!-- Create a new instance of AttributesTransformer -->
    <xsl:variable name="attrTrans" select="java:com.MyClass1.new($transformationRules)"/>
    <xsl:variable name="context" select="java:com.MyClass2.new()"/>
    (...)

    J'utilise le moteur de transformation dans la JDK 1.5.

    J'ai eu cette erreur:
    ERROR-Impossible de convertir le type d'argument/de retour dans la méthode 'com.MyClass1.new(reference)'

    La variable transformationRules est de type HashMap

    En déboguant le code de la jdk1.5, il semble que le problème pourrait venir du fait que le type de cette variable est de type java.util.HashMap alors que le moteur de transformation dans la JDK1.5 prend cette variable pour type "ReferenceType".

    Par ailleurs j'ai aucune erreur dans JDK1.4. Tout marche bien!

    Ma question est:

    Y a t-il un moyen de faire une conversion explicite avec XSLT pour corriger ce problème?

    Merci pour votre aide.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Citation Envoyé par kevin8100 Voir le message
    Y a t-il un moyen de faire une conversion explicite avec XSLT pour corriger ce problème?
    Avec XSLT non, le type HashMap n'y existe pas et il ne va rien pouvoir en faire.
    Les seuls types de XSLT sont :
    - ceux de XPath :
    -- ensemble de nœuds
    -- string
    -- nombre
    -- booléen
    - production de nœuds (une sorte d'ensemble de nœuds qu'on ne peut plus manipuler ni parcourir, seulement les insérer tels que avec value-of.)

    HashMap n'y figure pas, ni rien qui ressemble à un type dictionnaire.

    Je ne sais pas pourquoi ce problème se pose, je vais jouer un peu avec pour voir. Mais les types Java doivent être manipulés par Java et rien d'autre.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Je ne reproduis pas ton problème. Voici un code complet :

    classe TestXSLT (contient un constructeur avec HashMap, et main()):
    Code Java : 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
    24
    25
    public class TestXSLT {
     
      private Map<String, String> map;
     
      public TestXSLT(HashMap<String, String> map) {
        this.map = map;
      }
     
      public String toString() {
        return map.toString();
      }
     
      public static void main(String[] args) throws Exception {
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer(new StreamSource(new File("transform.xslt")));
     
        Map<String, String> map = new HashMap<String, String>();
        map.put("Hello", "world");
     
        transformer.setParameter("xslParam", map);
     
        transformer.transform(new StreamSource(new File("empty.xml")), new StreamResult(System.out));
      }
     
    }

    fichier transform.xslt (dans le répertoire courant):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:java="http://xml.apache.org/xslt/java">
     
      <xsl:param name="xslParam"/>
     
      <xsl:variable name="testObject" select="java:TestXSLT.new($xslParam)"/>
     
      <xsl:template match="/">
        <root><xsl:value-of select="$testObject"/></root>
      </xsl:template>
    </xsl:stylesheet>
    fichier empty.xml (répertoire courant, sans importance):
    Et j'obtiens le résultat attendu, sans erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?xml version="1.0" encoding="UTF-8"?><root xmlns:java="http://xml.apache.org/xslt/java">{Hello=world}</root>

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    Merci beaucoup pour ton aide. C'est étrange car ce n'est pas ce que j'ai avec mon programme et JDK 1.5 et JDK1.6. Est ce que c'est le cas pour toi? car mon pb n'existe pasavec JDK1.4.


    Par contre l'erreur est résolue en passant le type Object sur la variable argument et faisant le cast dans le code du constructeur.

    Merci encore pour ton avis

    T-H

Discussions similaires

  1. Réponses: 2
    Dernier message: 12/03/2014, 11h04
  2. [Débutant] Impossible de convertir le type 'short[]' en 'System.IntPtr'
    Par Elriks dans le forum C#
    Réponses: 6
    Dernier message: 02/12/2011, 10h56
  3. Impossible de convertir le type
    Par chris81 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 11/03/2008, 10h25
  4. typed des arguments et retour non connus
    Par will11 dans le forum C
    Réponses: 3
    Dernier message: 12/01/2006, 00h17

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