/ / xstream deserialization समस्या - xml, xstream, xml-deserialization

xstream deserialization समस्या - xml, xstream, xml-deserialization

निम्नलिखित XML को डी-क्रमांकित करने की कोशिश कर रहा है, जहां"दिन" और "फुल्ल्डोब" ऑब्जेक्ट हैं कस्टम तर्क के लिए अपने व्यक्तिगत कन्वर्टर्स के साथ प्रकार। एक बार डी-सीरियलाइज्ड और जब एक्सएक्सएमएल विधि ऑब्जेक्ट पर लागू होती है, "दिन" और "फुल्ल्डोब" के मान गायब हैं। मतलब, दिन और फुल्लडोब ठीक से क्रमबद्ध नहीं हो रहे हैं। क्या कोई मदद कर सकता है?

**********</ Strong> इनपुट XML *******

 <primarydob>
<month>05</month>
<day>13</day>
<year>1982</year>
<fulldob>19820513</fulldob>
</primarydob>

****</ Strong> एक्सएमएल ऑब्जेक्ट से (उपरोक्त एक्सएमएल को डी-सीरियल करने के बाद) *******

 <primarydob>
<month>05</month>
<day/>
<year>1982</year>
<fulldob/>
</primarydob>

यहाँ "Primarydob" के लिए ऑब्जेक्ट है

@XStreamAlias("dob")
public class DOBData {

@XStreamAlias("month")
private String month;

@XStreamAlias("day")
private DOBDay dobDay = new DOBDay();

@XStreamAlias("year")
private String year;

@XStreamAlias("fulldob")
private FullDOB fulldob = new FullDOB();

getters/setters
}

यहाँ "फुलडोब" के लिए वस्तु है

@XStreamAlias("fulldobdata")
@XStreamConverter(FullDOBDayMaskingConverter.class)
public class FullDOB {

@XStreamAlias("fulldob")
private String fullDOB;

public String getFullDOB() {
return fullDOB;
}

public void setFullDOB(String fullDOB) {

this.fullDOB = fullDOB;
}
}

यहाँ "दिन" के लिए वस्तु है

@XStreamAlias("dobday")
@XStreamConverter(DOBDayMaskingConverter.class)
public class DOBDay {

@XStreamAlias("day")
private String day;

public String getDay() {
return day;
}
public void setDay(String day) {
this.day = day;
}
}

धन्यवाद,

उत्तर:

जवाब के लिए 0 № 1

यहाँ DOBDayConverter कोड दिया गया है:

public class DOBDayConverter extends ReflectionConverter {
public DOBDayConverter(XStream xstream) {
super(xstream.getMapper(), xstream.getReflectionProvider());
}

@Override
public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
DOBDay d = (DOBDay) obj;
try {
writer.setValue(d.getDay());
} catch (Exception e) {
}
}

@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
DOBDay day = new DOBDay();

day.setDay(reader.getValue());

return day;
}

@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(DOBDay.class);
}

}

और यहाँ FullDOBConverter कोड है:

public class FullDOBConverter extends ReflectionConverter {
public FullDOBConverter(XStream xstream) {
super(xstream.getMapper(), xstream.getReflectionProvider());
}

@Override
public void marshal(Object obj, HierarchicalStreamWriter writer, MarshallingContext context) {
FullDOB fd = (FullDOB) obj;
try {
writer.setValue(fd.getFullDOB());
} catch (Exception e) {
}
}

@Override
public Object unmarshal(HierarchicalStreamReader reader,UnmarshallingContext context) {
FullDOB fd = new FullDOB();

fd.setFullDOB(reader.getValue());

return fd;
}

@SuppressWarnings("rawtypes")
@Override
public boolean canConvert(Class clazz) {
return clazz.equals(FullDOB.class);
}

}

कन्वर्टर्स को पंजीकृत करने और एनोटेशन को संसाधित करने के लिए मत भूलना:

XStream xs = new XStream();
xs.processAnnotations(DOBData.class);
xs.processAnnotations(FullDOB.class);
xs.processAnnotations(DOBDay.class);
xs.registerConverter(new DOBDayConverter(xs));
xs.registerConverter(new FullDOBConverter(xs));