Я создаю ИТ-тесты с помощью Citrus Framework. У меня есть два вызова на сервер: один для создания пользователя, а другой для выполнения какой-либо операции с этим пользователем.
Проблема: мне нужно значение из запроса на создание пользователя, которое не является строкой, чтобы поместить его в запрос второго вызова. Извлечение значения:
new SoapActionBuilder()
.client(webServiceClient)
.receive()
.namespace("ns", MY_NAMESPACE)
.extractFromPayload("//ns:someId", "someId")
Затем этот someId нужно использовать для создания следующего запроса. Если бы это была строка, это было бы:
request.setSomeId("${someId}");
Но это Long, поэтому приведение не работает (Citrus разрешает это значение позже, и Long#valueOf выполняется в тот же момент):
request.setSomeId(Long.valueOf("${someId}"));
Есть ли способ легко преобразовать эту переменную (возможно, при извлечении)?
Мне удается сделать это с помощью JavaAction, но это очень странно для его регулярного использования (необходимы 3 строки и новый метод). Это что-то вроде:
public void test() {
...
action(new JavaActionBuilder(new JavaAction().setInstance(this))
.method("setSomeId")
.methodArgs(request, "${someId}"));
...
}
public void setSomeId(Request request, String someId) {
request.setSomeId(Long.valueOf(someId));
}