Проблемы с XML XStream

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