Ошибка версии SOAP при отправке сообщения в конечную точку верблюда - PullRequest
0 голосов
/ 19 сентября 2019

Я создал веб-сервис с верблюдом и cxf.Настройка моего бина:

@Bean
open fun cxfServlet(): ServletRegistrationBean<CXFServlet> {
    val servlet = ServletRegistrationBean(CXFServlet(), "/ws/*")
    servlet.setLoadOnStartup(1)
    servlet.setName("cxfServlet")
    return servlet
}

@Bean
open fun cxf(): Bus {
    return BusFactory.newInstance().createBus()
}

@Bean("etp")
open fun cxfEndpoint(): CxfEndpoint {
    val endpoint = CxfEndpoint()
    endpoint.beanId = "etp"
    endpoint.address = "/etp"
    endpoint.serviceClass = Product::class.java
    endpoint.wsdlURL = "wsdl/example.wsdl"
    endpoint.dataFormat = DataFormat.POJO
    endpoint.bindingId = SOAPBinding.SOAP12HTTP_BINDING
    return endpoint
}

В маршруте я пытаюсь получить сообщение так:

from("cxf:bean:etp")
    .log(">> etp: start")

Но когда я отправляю сообщение из soapUI, я получаю сообщение об ошибке:

org.apache.cxf.binding.soap.SoapFault: сообщение SOAP 1.2 недопустимо при отправке в конечную точку только SOAP 1.1.

Но если я задаю значение dataFormat "RAW":

endpoint.dataFormat = DataFormat.RAW

Ошибка исчезает.В чем может быть проблема?

Я нашел настройки xml для связывания мыла:

<cxf:binding>
    <soap:soapBinding version="1.2"/>
</cxf:binding>

Но где мне его установить?

1 Ответ

0 голосов
/ 20 сентября 2019

Проблема была в файле WSDL.У него было пространство имен:

xmlns: soap = "http://schemas.xmlsoap.org/wsdl/soap/"

Но это пространство имен для мыла версии 1.1.Для создания сервиса с версии 1.2 мы должны установить пространство имен:

xmlns: soap = "http://schemas.xmlsoap.org/wsdl/soap12/"

...