向骆驼端点发送消息时 SOAP 版本不匹配
SOAP version mistmach when sending message to camel endpoint
我用 camel 和 cxf 创建了 webservice。
我的 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: A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint.
但是如果我设置 dataFormat 值 "RAW":
endpoint.dataFormat = DataFormat.RAW
错误消失。
可能是什么问题?
我找到了 xml 肥皂绑定设置:
<cxf:binding>
<soap:soapBinding version="1.2"/>
</cxf:binding>
但是我应该在哪里设置呢?
问题出在 WSDL 文件中。它有命名空间:
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
但是这个命名空间适用于 soap 版本 1.1。
要使用 soap 1.2 版本创建服务,应设置命名空间:
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/"
我用 camel 和 cxf 创建了 webservice。 我的 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: A SOAP 1.2 message is not valid when sent to a SOAP 1.1 only endpoint.
但是如果我设置 dataFormat 值 "RAW":
endpoint.dataFormat = DataFormat.RAW
错误消失。 可能是什么问题?
我找到了 xml 肥皂绑定设置:
<cxf:binding>
<soap:soapBinding version="1.2"/>
</cxf:binding>
但是我应该在哪里设置呢?
问题出在 WSDL 文件中。它有命名空间:
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
但是这个命名空间适用于 soap 版本 1.1。
要使用 soap 1.2 版本创建服务,应设置命名空间:
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap12/"