Как игнорировать пространства имен при тестировании тела HttpRequest с MockServer - PullRequest
0 голосов
/ 16 января 2020

После некоторой отладки я обнаружил, что при добавлении новых классов в мой unmarshaller пространство имен для нового класса добавляется в xml, когда выполняется вызов веб-сервиса через шаблон весеннего веб-сервиса. Это не вызывает сбой реализации, а только мои тесты. Проблема в том, что в тестах ожидаются файлы запроса xml, созданные для mockserver. Макерсервер проверяет несобранный xml из приложения на файл xml, созданный вручную. Если он совпадает, то он возвращает указанный c ответ, в противном случае возвращается нулевое значение, которое, как и должно быть, не проходит тест. Я просто не хочу заботиться о пространствах имен.

Мне нужно go просмотреть все созданные файлы xml и добавить это новое пространство имен. Это большой проект с 100+ xml файлами. В дополнение к сложности, только определенным xml файлам нужно новое пространство имен, поэтому, если я сделаю глобальный поиск и замену, другие тесты будут сломаны.

Вот пример того, как mockserver выполняет сравнение. Я использую org.mockserver framework.

@Bean
public StreamSource TestRequestXML() {
    String fileName = "./some/test/resource/TestRequestXML.xml";
    return new StreamSource(Paths.get(fileName).toFile());
}

@Bean
public MockServerClient amendedMockServerClient(MockServerClient mockServerClient) {
    mockServerClient.when(request().withBody(xml(sourceToString(TestRequestXML()))))
            .respond(response().withStatusCode(200));
}

Это мой unmarshaller bean

@Bean
public Jaxb2Marshaller unmarshaller() {
    marshaller = new Jaxb2Marshaller();
    marshaller.setClassesToBeBound(Foo.class, Bar.class, FooBar.class);
    marshaller.setLazyInit(false);
    return marshaller;
}

Вот пример того, как выглядит неупорядоченный запрос.

<req:RequestBatch schemaVersion="1.5E2"
                  xmlns:req="http://schemas.org/draft/request"
                  xmlns:foo="http://schemas.org/draft/foo"
                  xmlns:bar="http://schemas.org/draft/bar"
                  xmlns:foobar="http://schemas.org/draft/foobar">
    <foo:some>test</foo:some>
    <bar:some>test</bar:some>
</req:RequestBatch>

Вот пример созданного xml файла, который ожидает mockserver.

<req:RequestBatch schemaVersion="1.5E2"
                  xmlns:req="http://schemas.org/draft/request"
                  xmlns:foo="http://schemas.org/draft/foo"
                  xmlns:bar="http://schemas.org/draft/bar">
    <foo:some>test</foo:some>
    <bar:some>test</bar:some>
</req:RequestBatch>

Добавляя FooBar.class к демаршаллеру, приложение теперь добавляет пространство имен FooBar к немарсаллированному запросу. Чтобы mockserver не ломал мои тесты, мне нужно добавить nameapce FooBar во все файлы xml для тестов, на которые влияет unmarshaller.

Вместо того, чтобы вручную добавлять это пространство имен ко всем указанным c xml файлам, есть ли более разумный способ решить эту проблему?

...