Я использовал 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, он работает нормально.