2010-02-03 4 views
1

Я щипая выход XStream, и я получаю следующее:Как псевдоним java.lang.Integer с помощью XStream?

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

Так что я пытаюсь создать псевдоним для java.lang.Integer.class ... Не работает. Я сделал псевдонимы для многих других классов, и он работает отлично. Я также попытался создать псевдоним int.class; не повезло.

Какая уловка?

Спасибо!

EDIT

я понял, этот вопрос не был достаточно ясен. Меня интересует не для псевдонима имени элемента (XStream делает это уже очень хорошо). Я хочу, чтобы псевдоним данных, содержащихся в элементе. Там нет ничего, как пример:

Вот тест я сделал:

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)); 
    } 

} 

Какие выходы:

<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> 

Как вы можете видеть, имена элементов хорошо псевдонимами (второй список), но если я использую его как данные, я не могу найти способ сократить имена классов. Я пробовал большинство соответствующих методов XStream.alias *. То, что я хотел бы что-то подобное (первый список):

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

Честно, прямо сейчас, я сомневаюсь, что это возможно без довольно большой хак, но я, по крайней мере разделяя идею.

ответ

2

Это, по-видимому 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

Если .alias (String, класс) действительно делает то, что я думаю, что он делает и то, что он говорит, что делает (HTTP: //xstream.codehaus .org/javadoc/com/thoughtworks/xstream/XStream.html # alias (java.lang.String,% 20java.lang.Class)), разве этот код не реализует бессмысленно один и тот же класс для многих имен? И это одна вещь, которую я пробовал; Мне было бы интересно увидеть результат, сгенерированный этим кодом. – Joanis

+0

Я не знаю, что это был не мой код, я просто использовал его в качестве примера, чтобы ответить на ваш вопрос. – Woot4Moo

+1

Вот что я и предполагал, спасибо вам! Я знаю, что XStream имел «проблемы» в более ранних версиях, где вам приходилось использовать псевдоним int.class вместо Integer.class из-за (un) бокса и тому подобного ... Я думаю, это может быть немного что-то, что нужно исправить. – Joanis

Смежные вопросы