2015-08-19 2 views
2

Я использую Cucumber для десятков проектов Java до сих пор никогда не сталкивался с этой проблемой раньше, поэтому я немного озадачен.Неправильный конвертер Xstream, выбранный Cucumber

У меня есть простая таблица, которую я хочу сопоставить с List в моем определении шага.

And deal repository contains 
    | dealPid | closingDate | expenseCode | 
    | 1  | 01/06/2015 | test  | 

Я начал создавать свой собственный POJO с только необходимые поля, следуя стандартной ГорбатыйРегистр конвенции (геттеров/сеттеры опущены для ясности)

public class Deal { 

    private String dealPid ; 
    private Date closingDate ; 
    private String expenseCode; 
} 

мой шаг определение:

@Given("^deal repository contains$") 
public void deal_repository_contains(
     @Format("dd/MM/yyyy") List<DEAL> deals) throws Throwable { 
... 
} 

Поля отображаются правильно, и я получаю список с одним предметом сделки, отлично. Когда я иду в отладке, до cucumber.runtime.xstream.LocalizedXStreams

Converter converter = converterLookup.lookupConverterForType(clazz); 

Я вижу XSTREAM ReflectionConverted получает выбранный для DataTable разбора.

Это устаревший проект, а другие разработчики сказали мне, что для этого уже существует класс. Итак, теперь я хочу переключиться на этот класс, который следует по-настоящему странным соглашениям: имя класса - это имя таблицы, на котором оно отображается в БД, и большинство имен атрибутов на самом деле являются именами столбцов.

Так что теперь я ' m, используя этот старый класс DEAL из другого пакета в моем определении шага, поэтому я ожидаю, что список появится, но это не так. Я получаю список, но даже первая строка анализируется. В отладке я вижу, что выбранный конвертер является DynamicClassWithStringAssignableConverter вместо ReflectionConverter ранее, поэтому результат анализа в конце концов отличается.

К сожалению, я не могу отлаживать и понимать, почему эта реализация выбрана, поскольку Xstream переупаковывается в огурцах-jvm-deps и Eclipse теряется (или я не знаю, как правильно подключать источники в этом случае).

Я попытался временно добавить поля, которые мне нужны, с собственными именами (то же, что и в моем начальном классе Deal) в классе DEAL, но это не сработает. Изначально класс DEAL реализовал Serializable: я удалил его, но все равно такое же поведение.

Это на самом деле выглядит, потому что имя класса полный верхний регистр, другой преобразователь Xstream получает сортированное ...

Может ли это действительно быть основной причиной проблемы?

Благодаря

ответ

0

Просто нажмите это очень удивительное поведение самого - в моем случае проблема оказалась в том, что DynamicClassWithStringAssignableConverter.canConvert возвращает true если тип для преобразования имеет конструктор, который принимает один аргумент, String.

Работать вокруг было, чтобы удалить конструктор!

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