#java #xml #xstream
#java #xml #xstream
Вопрос:
<PersonalVehicleCoverage>
<EffectiveDate class="sql-date">2011-03-01</EffectiveDate>
<ExpirationDate class="sql-date">2011-05-31</ExpirationDate>
</PersonalVehicleCoverage>
Действующее значение имеет java.sql.date;
Я использую XStream для генерации XML из объектов Java, используя следующий синтаксис:
xstream.toXML(data);
Я не хочу, class="sql-date"
чтобы выводился в сгенерированном XML.
Как мне этого добиться?
Комментарии:
1. Разве это невозможно в XSTREAM?
2. Если вы заинтересованы в том, чтобы вместо этого попробовать JAXB impl, дайте мне знать, я был бы рад помочь: bdoughan.blogspot.com/2010/10 /…
3. Не могли бы вы, пожалуйста, показать нам свой объект данных? Атрибут class выводится, только если фактический тип объекта не соответствует типу объявления поля.
Ответ №1:
Это то, что помогло мне решить ту же проблему:
xstream.addDefaultImplementation(java.sql.Date.class, Date.class);
xstream.addDefaultImplementation(java.sql.Timestamp.class, Date.class);
Где Date.class
находится java.util.Date
.
Ответ №2:
Достичь того, чего вы хотите, просто. Вы создаете экземпляр XStream и настраиваете его (в примере ниже я должен установить псевдоним для PersonalVehicleCoverage
, поскольку статические внутренние классы сериализуются с префиксом содержащего класса. Поскольку в примере не используется пакет, он сериализуется так, как вы требовали. Если ваши классы находятся в пакете, вы можете использовать что-то подобное для адаптации XML: xStream.aliasPackage("pre", "my.package");
Вот пример кода:
import java.sql.Date;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import com.thoughtworks.xstream.XStream;
public class XStreamDemo {
public static void main(String[] args) throws ParseException {
XStream xStream = new XStream();
xStream.alias("PersonalVehicleCoverage", PersonalVehicleCoverage.class);
PersonalVehicleCoverage object = new PersonalVehicleCoverage();
DateFormat dateFormat = new SimpleDateFormat("yyyy MMM DD");
object.EffectiveDate = new Date(dateFormat.parse("2011 Jan 1").getTime());
object.ExpirationDate = new Date(dateFormat.parse("2011 Jan 31").getTime());
System.out.println(xStream.toXML(object));
}
static class PersonalVehicleCoverage {
Date EffectiveDate;
Date ExpirationDate;
}
}
И вот результат этого примера:
<PersonalVehicleCoverage>
<EffectiveDate>2011-01-01</EffectiveDate>
<ExpirationDate>2011-01-31</ExpirationDate>
</PersonalVehicleCoverage>