Модульное тестирование оконечной точки Spring-WS SOAP завершается с ошибкой в ​​MockFilterChain, возвращая 404 - PullRequest
0 голосов
/ 03 февраля 2020

Я использовал Spring-WS для написания конечной точки SOAP и сейчас нахожусь в процессе написания некоторых тестов. Однако, когда я пытаюсь отправить свой запрос, я получаю 404 в doFilter() класса MockFilterChain класса Spring, и я не могу понять, почему. Есть ли что-то еще, что мне нужно смоделировать?

Моя конечная точка - симулятор SOAP, который извлекает сгенерированные WSDL исходные файлы, которые он использует, из другого пакета в моем проекте, чтобы избежать ненужного дублирования. Поэтому у меня нет прямого доступа к файлам WSDL в качестве ресурса classpath.

Мой проект выглядит следующим образом:

Конечная точка

import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;

@Endpoint
public class MockSoapEndpoint {

    private final ObjectFactory objectFactory = new ObjectFactory();

    ...
    ...

    @PayloadRoot(namespace = NAMESPACE, localPart = "soapEndpoint")
    @ResponsePayload
    public JAXBElement<MySoapResponse> chargeVolume(@RequestPayload JAXBElement<MySoapRequest> request) {
        ...
        ...
    }

Config

@EnableWs
@Configuration
public class MockSoapConfig extends WsConfigurerAdapter {

    @Bean
    public ServletRegistrationBean messageDispatcherServlet(final ApplicationContext applicationContext) {
        MessageDispatcherServlet messageDispatcherServlet = new MessageDispatcherServlet();
        messageDispatcherServlet.setApplicationContext(applicationContext);
        messageDispatcherServlet.setTransformWsdlLocations(true);
        return new ServletRegistrationBean(messageDispatcherServlet, "/ws/*");
    }
}

Тест

@WebMvcTest
@ContextConfiguration(classes = { MockSoapConfig.class, MockSoapEndpoint.class })
@ExtendWith(SpringExtension.class)
class MockSoapEndpointTest {

    private static final String SOAP_REQUEST = ""
                    + "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"\n"
                    + "<soapenv:Header/>..."</soapenv:Envelope>\n";

    @Autowired
    private MockMvc mockMvc;

    @Test
    void givenNonRejectedMdnReturnChargingInformationWithCorrectMinMajCodes() throws Exception {

        final String endpoint = "http://localhost:8080/ws";

        mockMvc.perform(post(endpoint).contentType(MediaType.TEXT_XML)
                                  .content(SOAP_REQUEST)
                                  .accept(MediaType.TEXT_XML))
               .andExpect(status().isOk());
    }
}

Этот тест возвращает код ответа 404, а не 200 I ' Я ожидаю. Когда я вручную тестирую конечную точку, используя http://localhost:8080/ws и тот же кусок XML, он работает нормально.

...