将消息发送到骆驼端点时的SOAP版本Mistmach

时间:2019-09-19 13:27:13

标签: kotlin soap apache-camel cxf

我用骆驼和cxf创建了Web服务。 我的bean的设置:

@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.1的端点时,SOAP 1.2消息无效。

但是,如果我将dataFormat值设置为“ RAW”:

endpoint.dataFormat = DataFormat.RAW

错误消失。 可能是什么问题?

我找到了用于肥皂装订的xml设置:

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

但是我应该在哪里设置?

1 个答案:

答案 0 :(得分:0)

问题出在WSDL文件中。它具有名称空间:

  

xmlns:soap =“ http://schemas.xmlsoap.org/wsdl/soap/”

但是此名称空间适用于soap版本1.1。
要使用soap 1.2版本创建服务,应设置名称空间:

  

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