2013-08-15 1 views
1

Я использую JAXB для файлов unmarsh xml, которые могут содержать разные типы, а затем соответствующие классы. Вот диапазон классJava Xml Unmarshing typecast

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement(name = "range") 
public class Range { 

    @XmlAttribute 
    private float min; 
    @XmlAttribute 
    private float max; 

    public float getMin() { 
     return min; 
    } 

    public void setMin(float min) { 
     this.min = min; 
    } 


    public float getMax() { 
     return max; 
    } 

    public void setMax(float max) { 
     this.max = max; 
    } 

} 

и в соответствии текст XML

<range min="0" max="width"/> 

Итак, как вы видите, максимальное значение не является поплавок, но строка. Моя программа или unmarshaller должны иметь возможность справиться с этим, возможно, вызывая другой метод setter, как показано ниже. Это возможно.

public void setMax(String max) { 
    this.max = Constants.getValueOf(max); 
} 

Спасибо за любую помощь.

+0

ли вы запустить это? Должно быть, это сработало. В противном случае, да, вы можете аннотировать ваши сеттеры вместо полей. –

ответ

0

Если вы меняете field от float к Float вы можете написать XmlAdapter обрабатывать этот случай использования.

public class MyAdapter extends XmlAdapter<String, Float> { 
    // Your logic for converting between the String and Float 
} 

Тогда вы можете ссылаться на XmlAdapter с помощью @XmlJavaTypeAdapter аннотацию:

@XmlAttribute 
@XmlJavaTypeAdapter(MyAdapter.class) 
private Float max; 
+1

Спасибо, это сработало! – ramin

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

  • Нет связанных вопросов^_^