Обновление версии Camel до 2.22.0 с 2.19.0 приводит к ошибке / сбоям модульных тестов - PullRequest
0 голосов
/ 28 октября 2019

Я работаю над большим проектом Camel с 351 модульными тестами, которые все проходят для Camel версии 2.19.0. После обновления до Camel 2.22.0 я получаю 15 ошибок и 23 сбоев.

(В этом проекте используется спецификация Spring из зависимости, которая также используется 2 другими проектами Camel, оба прекрасно работают с верблюдом 2.22.0, но не с 2.19.0, и поэтому я хотел былучше, чтобы этот проект работал с 2.22.0, а не сбрасывал остальные два до 2.19.0, поэтому ни один из них не отличается)

Ниже приведен фрагмент базового класса тестирования, который этот проект использует длятестовые ответы, полученные после отправки запросов SOAP по маршрутам Camel:

public static final String FROM_URI = "direct:start";

public static final String TO_URI = "mock:out";

@Produce(uri = FROM_URI)
protected ProducerTemplate testProducer;

@EndpointInject(uri = TO_URI)
protected MockEndpoint mockEndpoint;

@Test
public void testRequest() {
    Exchange exchange = setupExchange(//path to request XML);
    Exchange response = testProducer.send(exchange);
    verifyResponse(response, //path to expected response);
}

protected Exchange setupExchange(String pathToRequest) {
    Exchange exchange = new DefaultExchange(testProducer.getDefaultEndpoint(), ExchangePattern.InOut);
    exchange.getIn().setBody(getFile(pathToRequest));
    return exchange;
}

protected void verifyResponse(Exchange response, String path) {
    String receiveBody = getBodyFromResponse(response);
    URL resource = getResource(path);
    try {
        String fileContent = FileUtils.readFileToString(Paths.get(resource.toURI()).toFile());
        assertThat(removeNamespacesFromXML(body)).isXmlEqualTo(removeNamespacesFromXML(fileContent));
    } catch (IOException | URISyntaxException e) {
        throw new RuntimeException(e);
    }
}

private String getBodyFromResponse(Exchange receivedMessage) {
    return receivedMessage.hasOut() ? receivedMessage.getOut().getBody(String.class)
            : receivedMessage.getIn().getBody(String.class);
}

private static String removeNamespacesFromXML(String xml) {
    return xml.replaceAll("ns\\d:", "").replaceAll(":ns\\d", "").replaceAll("xmlns=\".*\"", "");
}

При использовании Camel 2.19.0 и запуске одного из тестовых классов, который расширяет приведенный выше фрагмент кода, testProducer возвращает представление DataTypeответ, который с помощью метода getBodyFromResponse возвращает ожидаемую строку XML:

enter image description here

enter image description here

После обновления до Camel 2.22.0 testProducer возвращает объект JAXB типа входного XML-запроса SOAP (DocTypeInvoiceInput), но пустой (т. Е. С полями null). Из-за этого метод getBodyFromResponse просто возвращает имя объекта, что затем либо приводит к ошибке в тестовых примерах, либо к ошибочным утверждениям:

enter image description here

enter image description here

Изменяет ли обновление версии Camel до 2.22.0 способ, которым JAXB анализирует XML-файлы на объекты, и именно поэтому мои тесты теперь утверждают против неправильных вещей?

Или тестирование в Camel теперь другое, и поэтому мне следует провести рефакторинг своего тестового класса?

PS Я пробовал это с верблюдом 2.20.0 и 2.21.0, и у меня возникла та же проблема. Кажется очень странным, что во многих моих тестовых случаях все было в порядке и заканчивалось провалом только путем изменения версии Camel, поэтому любая помощь будет принята с благодарностью.

...