/ / Camino Apache Camel Spring-WS não inicializando - java, soap, spring-boot, apache-camelo, spring-ws

Camino Apache Camel Spring-WS não inicializando - java, soap, spring-boot, apache-camelo, spring-ws

Eu estou lutando com uma rota Spring-WS eu gostaria de adicionar no meu aplicativo Spring-boot. Eu continuo recebendo a seguinte exceção na inicialização:

Caused by: java.lang.IllegalArgumentException: No instance of CamelSpringWSEndpointMapping found in Spring ApplicationContext. This bean is required for Spring-WS consumer support (unless the "spring-ws:beanname:" URI scheme is used)
at org.apache.camel.component.spring.ws.SpringWebserviceComponent.addEndpointMappingToConfiguration(SpringWebserviceComponent.java:142)
at org.apache.camel.component.spring.ws.SpringWebserviceComponent.addConsumerConfiguration(SpringWebserviceComponent.java:83)
at org.apache.camel.component.spring.ws.SpringWebserviceComponent.createEndpoint(SpringWebserviceComponent.java:67)
at org.apache.camel.impl.DefaultComponent.createEndpoint(DefaultComponent.java:114)
at org.apache.camel.impl.DefaultCamelContext.getEndpoint(DefaultCamelContext.java:568)
... 40 common frames omitted

Isso é muito estranho, já que eu adiciono explicitamente o CamelEndpointMapping (que se estende do CamelSpringWSEndpointMapping) na minha configuração do Spring assim:

@EnableWs
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}

@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext applicationContext)
{
MessageDispatcherServlet messageDispatcherServlet = new MessageDispatcherServlet();
messageDispatcherServlet.setApplicationContext(applicationContext);
messageDispatcherServlet.setTransformWsdlLocations(true);

return new ServletRegistrationBean(messageDispatcherServlet, "/soap/*");
}

@Bean
public CamelEndpointMapping endpointMapping()
{
return new CamelEndpointMapping();
}
}

Minha rota:

@Component
public class MyRoutes extends RouteBuilder
{
@Override
public void configure() throws Exception
{
from("spring-ws:soapaction:http://example.com/myservice")
.to("log:cameltest?level=DEBUG");
}
}

O que eu estou fazendo errado aqui? Você pode encontrar a fonte completa do meu projeto de amostra no GitHub: https://github.com/verhage/cameltest

Respostas:

0 para resposta № 1

Parece que a mensagem de erro é enganosa.
Seu URL precisa ser assim:

spring-ws:soapaction:XXX?endpointMapping=endpointMapping

(encontrado por depuração SpringWebserviceComponent.addConsumerConfiguration e percorrendo)