我有一个wsdl,从中我使用apache cxf生成服务器存根。问题是我部署的新wsdl与初始版本不同,因此对旧版本的SOAP请求不适用于新版本。我用soapUI测试它。新的名称空间 init :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:init="http://initiator.clientprovisioning_1_0.mdm.smarttrust.com/">
<soapenv:Header/>
<soapenv:Body>
<init:cpDiscovery.Response>
旧肥皂消息没有这个:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<cpDiscovery.Response>
我会提供所需的其他信息。我一直试图解决这个问题2天了。请帮忙。
修改 这个 init 前缀取决于java包的第一个字母。因此,例如,如果类在me.mycompany.example中,则前缀为:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:exam="http://example.mycompany.net/">
<soapenv:Header/>
<soapenv:Body>
<exam:cpDiscovery.Response>
修改 http://cxf.apache.org/docs/developing-a-service.html#DevelopingaService-AnnotatingtheCode 这个状态
targetNamespace属性指定定义服务的目标命名空间。如果未指定此属性,则目标命名空间将从包名称派生。
我该怎样摆脱这个?
答案 0 :(得分:1)
您已在XML架构中引入了一个描述SOAP负载的命名空间。这不应该影响客户端调用服务的能力,只要他们可以访问模式文件。
答案 1 :(得分:1)
“旧”肥皂消息实际上是无效的,可能应该从未起作用。根据soap规范,soap的子项:Body必须是名称空间限定的。看起来“新”行为就是你想要的行为。