У меня есть тест JUnit, который проверяет, работает ли настроенная сериализация xml правильно. Настроенная сериализация xml - это всего лишь несколько пользовательских конвертеров для Xstream. Десериализаторы работают, но по какой-то причине в Eclipse 3.x JUnit не проходит сериализацию. В Ant в командной строке все работает просто отлично. Он также отлично работает в Eclipse, если я отлаживаю и выполняю тестовый пример, но если поставить точку останова после выполнения неудачного тестового примера, он все равно завершится неудачей.
Что дает? У меня проблема с классом?
Некоторая дополнительная информация:
Ожидаемое:
<site>
<name>origin</name>
<version>0.6.0</version>
<description>Stuff</description>
<source>./fake-file.xml</source>
<location>
<latitude deg="44" min="26" sec="37.640"/>
<longitude deg="-57" min="-38" sec="-6.877"/>
<ellipsoid-height value="-79.256" units="meters"/>
<geoid-height value="0.000" units="meters"/>
</location>
</site>
Фактический:
<site>
<name>origin</name>
<version>0.6.0</version>
<description>Stuff</description>
<source>./fake-file.xml</source>
<location>
<latitude deg="44" min="26" sec="37.640"/>
<longitude deg="-57" min="-38" sec="-6.877"/>
<ellipsoid-height value="-79.256" units="meters"/>
<geoid-height value="-79.256" units="meters"/>
</location>
</site>
Код, который записывает поля местоположения:
public void marshal(Object source,
HierarchicalStreamWriter writer,
MarshallingContext context)
{
ILatLonEllipsoidHeightPoint aLoc = (ILatLonEllipsoidHeightPoint) source;
synchronized(aLoc)
{
writer.startNode(LATITUDE);
writer.addAttribute(DEGREES,
Integer.toString(
PointUnitConversions.getLatitudeHours(aLoc.getLatitude())));
writer.addAttribute(MINUTES,
Integer.toString(
PointUnitConversions.getLatitudeMinutes(aLoc.getLatitude())));
writer.addAttribute(SECONDS,
String.format("%.3f",
PointUnitConversions.getLatitudeSeconds(aLoc.getLatitude())));
writer.endNode();
writer.startNode(LONGITUDE);
writer.addAttribute(DEGREES,
Integer.toString(
PointUnitConversions.getLongitudeHours(aLoc.getLongitude())));
writer.addAttribute(MINUTES,
Integer.toString(
PointUnitConversions.getLongitudeMinutes(aLoc.getLongitude())));
writer.addAttribute(SECONDS,
String.format("%.3f",
PointUnitConversions.getLongitudeSeconds(aLoc.getLongitude())));
writer.endNode();
writer.startNode(ELLIPSOID_HEIGHT);
writer.addAttribute(VALUE,
String.format("%.3f", aLoc.getEllipsoidHeight()));
writer.addAttribute(UNITS, METERS);
writer.endNode();
writer.startNode(GEOID_HEIGHT);
writer.addAttribute(VALUE,
String.format("%.3f", aLoc.getGeoidHeight()));
writer.addAttribute(UNITS, METERS);
writer.endNode();
}
}
Вызовы PointUnitConversions делают очевидные вычисления, чтобы получить десятичные градусы и преобразовать их в соответствующие целые или двойные значения для составных частей.
Это просто последний атрибут местоположения, который вызывает сбой.