2010-02-03 7 views
1

Je suis peaufinage une sortie Xstream, et je reçois les éléments suivants:Comment alias java.lang.Integer en utilisant XStream?

 <entry> 
     <string>ahh</string> 
     <java-class>java.lang.Integer</java-class> 
     </entry> 

J'essaie donc de créer un alias pour java.lang.Integer.class ... ne fonctionne pas. J'ai fait des alias pour de nombreuses autres classes et ça marche très bien. J'ai également essayé d'alias int.class; pas de chance.

Quel est le truc?

Merci!

EDIT

je me suis rendu à cette question n'a pas été assez claire. Ce qui m'intéresse est pas pour alias le nom de l'élément (XStream le fait déjà très bien). Je veux alias les données contenues dans l'élément. Il n'y a rien comme un exemple:

Voici un test que j'ai fait:

import java.util.ArrayList; 

import com.thoughtworks.xstream.XStream; 

public class Main { 

    public static void main(String[] args) { 
     ArrayList<Class<?>> classes = new ArrayList<Class<?>>(); 
     classes.add(Integer.class); 
     classes.add(Long.class); 
     classes.add(Double.class); 
     classes.add(Float.class); 

     ArrayList<Number> numbers = new ArrayList<Number>(); 
     numbers.add(new Integer(3)); 
     numbers.add(new Long(3)); 
     numbers.add(new Double(3)); 
     numbers.add(new Float(3)); 

     XStream xml = new XStream(); 
     xml.alias("inty", Integer.class); 
     xml.aliasType("inty", Integer.class); 
     xml.aliasPackage("jl", "java.lang"); 

     System.out.println(xml.toXML(classes)); 
     System.out.println(xml.toXML(numbers)); 
    } 

} 

qui sort:

<list> 
    <java-class>java.lang.Integer</java-class> 
    <java-class>java.lang.Long</java-class> 
    <java-class>java.lang.Double</java-class> 
    <java-class>java.lang.Float</java-class> 
</list> 
<list> 
    <int>3</int> 
    <long>3</long> 
    <double>3.0</double> 
    <float>3.0</float> 
</list> 

Comme vous pouvez le voir, les noms d'éléments sont bien aliasées (deuxième liste), mais si je l'utilise comme données, je ne trouve pas un moyen de raccourcir les noms de classe. J'ai essayé la plupart des méthodes XStream.alias * pertinentes. Ce que je voudrais quelque chose comme (pour la première liste):

<list> 
    <java-class>int</java-class> 
    <java-class>long</java-class> 
    <java-class>double</java-class> 
    <java-class>float</java-class> 
</list> 

Honnêtement, en ce moment, je doute que cela est possible sans assez grand hack, mais je suis au moins partager l'idée.

Répondre

2

Il est apparemment Integer.class

http://code.google.com/p/jpoco/source/browse/trunk/jpoco/src/main/jpoco/internal/xstream/XStreamFactory.java?r=300

xstream.alias("totalResults", Integer.class); 
      xstream.alias("startIndex", Integer.class); 
      xstream.alias("itemsPerPage", Integer.class); 
      xstream.alias("age", Integer.class); 
+0

Si .alias (String, classe) fait vraiment ce que je pense qu'il fait et ce qu'il dit qu'il fait (http: //xstream.codehaus .org/javadoc/com/thinkworks/xstream/XStream.html # alias (java.lang.String,% 20java.lang.Class)), ce code ne fait-il pas inutile la même classe à plusieurs noms? Et c'est exactement une chose que j'ai essayée; Je serais curieux de voir la sortie générée par ce code. – Joanis

+0

Je ne sais pas que ce n'était pas mon code, je l'utilisais juste comme exemple pour potentiellement répondre à votre question. – Woot4Moo

+1

C'est ce que j'ai supposé, merci quand même! Je sais que XStream avait des "problèmes" dans les versions précédentes où vous deviez alias int.class au lieu de Integer.class à cause de (non) la boxe et des choses comme ça ... Je suppose que c'est un petit quelque chose qui reste à réparer. – Joanis

Questions connexes