我尝试使用spring Boot 和Kotlin使用SOAP服务,但我的应用程序无法识别服务(客户端)中的编组器。
项目编译并运行,但当我向端点“/get”发出请求时,我遇到了错误:
java.lang.IllegalStateException: No marshaller registered. Check configuration of WebServiceTemplate.
字符串
我做了这个客户:
class ExtraccionCatalogosService: WebServiceGatewaySupport() {
fun extraer(){
println("Iniciando extracción de catálogos")
val request = VehiculoMarca()
request.proveedor = "XXXXX"
request.password = "XXXX"
request.usuario = "AH"
request.token = "00000000000"
request.tipoVehiculo = "01"
request.negocio = ""
val response = WebServiceTemplate().marshalSendAndReceive("https://pruebas.seguros.com/webservices/cot?wsdl", request, SoapActionCallback("http://ws.units.seguros.com/")) as VehiculoMarcaResponse
println(response)
}
}
型
添加了这个配置后,我已经在src/main/Kotlin包中的路径“com.ws.seguros.models.wsdl”中生成了模型。
@Configuration
class ExtraccionMarshaller {
@Bean
fun getMarshaller(): Jaxb2Marshaller{
println("configurando marshaller")
val jaxb2Marshaller = Jaxb2Marshaller()
jaxb2Marshaller.contextPath = "com.ws.seguros.models.wsdl"
return jaxb2Marshaller
}
@Bean
fun getExtraccionCatalogos(jaxb2Marshaller: Jaxb2Marshaller): ExtraccionCatalogosService{
println("configuracndo extraccion service")
val extraccionCatalogosService = ExtraccionCatalogosService()
extraccionCatalogosService.defaultUri = "https://pruebas.seguros.com/webservices/cot?wsdl"
extraccionCatalogosService.marshaller = jaxb2Marshaller
extraccionCatalogosService.unmarshaller = jaxb2Marshaller
return extraccionCatalogosService
}
}
型
最后,我有这个控制器:
@RestController
class ExtraccionCatalogosController {
@Autowired
lateinit var extraccionCatalogosService: ExtraccionCatalogosService
@GetMapping("/get")
fun extraer(){
val resp = extraccionCatalogosService.extraer()
println(resp)
}
}
型
1条答案
按热度按时间vsdwdz231#
我找到了答案。当我使用Kotlin时,IDE建议在服务(客户端)中使用WebServiceTemplate(),但这会影响Bean中已经创建的WebServiceTemplate()。当我将其更改为getWebServiceTemplate()时,它开始工作。